Вопрос № 108919: Добрый день, уважаемые эксперты. Имеется несколько несвязанных между собой таблиц следующего вида (В Приложении):
В общей постановке задачи такого рода таблиц бужет насчитыватся около 10, но пока решил ограничится этим. Вопрос в следующем: К...
Вопрос № 108.919
Добрый день, уважаемые эксперты. Имеется несколько несвязанных между собой таблиц следующего вида (В Приложении):
В общей постановке задачи такого рода таблиц бужет насчитыватся около 10, но пока решил ограничится этим. Вопрос в следующем: Каким образом можно сделать выборку значений по всем элементам по Таблице1 и Таблице2 одним запросом. Из формы берутся данные по номеру лицевого счета абонента и временной интервал, за который следует выполнить запрос, т.е. дата начала и дата окончания. Обратите внимание, что в Таблице2 есть не все лицевые счета, которые есть в Таблице1. Запрос по одной таблице замечательно работает.
Можно конечно же сделать отдельный запрос под каждую таблицу, но будет некрасиво, а в некоторых случаях и долго.
Под одну таблицу запрос выглядит совсем просто:
$str = "nas_ls ='$_POST[ls]' AND nas_data>='$_POST[dA]' AND nas_data<='$_POST[dZ]'";
$query = "SELECT * FROM nas WHERE $str";
$result = mysql_query($query) or die(mysql_error());
for($mas = array(); $row = mysql_fetch_assoc($result); $mas[]=$row);
ну и т.д.
Помогите, пожалуйста, а то после моих проб объеденить все в один запрос получается полный бред. Заранее благодарен.
P.S. Прошу обратить внимание, что значения лицевых счетов из Таблицы 1 может не присутствовать в Таблице 2.
Отвечает: Титов Михаил Анатольевич
Здравствуйте, Савченко И.В.!
А ваша СУБД поддерживает представления (View)? Если да, то так
CREATE VIEW nas_igot
AS
SELECT DISTNCT nas_ls AS Is, nas_data AS data, nasS AS S FROM nas
UNION
SELECT DISTNCT lgot_ls, lgot_data, lgS FROM lgot
Далее в ваших запросах используете имя представления вместо имени таблицы. Но имейте в виду - при больших объемах данных неизбежно возникнут проблемы с производительностью. Лучше сразу пересмотреть структуру базы данных - все десять nas, Ig и т.д. в одну таблицу, а различать их по специальному кодовому полю.
Ответ отправил: Титов Михаил Анатольевич (статус: 3-ий класс)
Ответ отправлен: 12.11.2007, 03:01