Вопрос № 109474: Добрый день уважаемые эксперты. Вопрос в догонку темы. Для двух таблиц (В приложении) делаю запрос:
$query = "CREATE VIEW Resulttable
AS
SELECT * FROM nas WHERE ls ='$_POST[ls]' AND data BETWEEN '$_POST[date1]' AND '$_POST[date3...
Вопрос № 109.474
Добрый день уважаемые эксперты. Вопрос в догонку темы. Для двух таблиц (В приложении) делаю запрос:
$query = "CREATE VIEW Resulttable
AS
SELECT * FROM nas WHERE ls ='$_POST[ls]' AND data BETWEEN '$_POST[date1]' AND '$_POST[date3]'
UNION ALL
SELECT * FROM lgot WHERE ls_lg ='$_POST[ls]' AND data_lg BETWEEN '$_POST[date1]' AND '$_POST[date3]'";
mysql_query($query) or die(mysql_error());
$result1 = mysql_query("SELECT * FROM Resulttable") or die(mysql_error());
mysql_query("DROP VIEW Resulttable") or die(mysql_error());
Все замечательно работает, но есть только одно немаловажное "НО". При выборке данных если скажем $_POST[ls]='10010010' (т.е.
данные присутствуют ТОЛЬКО в одной таблице), то выборка следующая:
Array (
[0] => Array [1] => Array
([nas_id] => 1 ([nas_id] => 2
[ls] => 10010010 [ls] => 10010010
[data] => 2007-01-01 [data] => 2007-02-01
[sum] => 121) [sum] => 121)
)
Вроде все нормально и такой результат меня устраивает.
А вот если $_POST[ls]='10010060' (т.е. данные присутствуют уже в двух таблицах), то выборка получается уже следующая:
Array (
[0] => Array [1] => Array
([nas_id] => 7 ([nas_id] => 8
[ls] => 10010060 [ls] => 10010060
[data] => 2007-01-01 [data] => 2007-02-01
[sum] => 95.48) [sum] => 121)
[2] => Array [3] => Array
([nas_id] => 1 ([nas_id] => 2
[ls] => 10010060 [ls] => 10010060
[data] => 2007-01-01 [data] => 2007-02-01
[sum] => 47.74) [sum] => 60.5)
)
Т.Е. для элементов [2] и [3] массива Array индексы такие же как и для элементов [0] и [1], хотя элементы 2 и 3 выбраны из
Таблицы2. То есть я не могу увидеть из какой таблицы результат попала в выборку. И отсюда вытекает вопрос: Каким образом мне
можно организовать запрос, чтобы в результате выборки индексы элементов массива Array соответствовали индексам той таблицы
откуда они получены. Думаю вопрос понятен. Заранее спасибо.
Отвечает: Flynn
Здравствуйте, Савченко И.В.!
Не совсемпонял что именно вам хочется получить с индексами, но для варианта разных таблиц вам надо ввести еще один элемент, который для каждой таблицы был бы разным. Делается это так (дату я убрал :) )
SELECT N.*, "nas" as table_name FROM nas N WHERE ls ='10010060'
UNION ALL
SELECT L.*, "lgot" as table_name FROM lgot L WHERE lgot_ls ='10010060'
После данного запроса у вас появится дополнительнsq ряд в котором будет отображаться из какой таблицы выбран данный элемент.
Ответ отправил: Flynn (статус: 8-ой класс)
Ответ отправлен: 15.11.2007, 10:50
Отвечает: Зиновьев Дмитрий Владимирович
Здравствуйте, Савченко И.В.!
А не сильно ли вам помешает, если вы переделаете следующим образом:
$query = "CREATE VIEW Resulttable
AS
SELECT 'nas', * FROM nas WHERE ls ='$_POST[ls]' AND data BETWEEN '$_POST[date1]' AND '$_POST[date3]'
UNION ALL
SELECT 'lgot', * FROM lgot WHERE ls_lg ='$_POST[ls]' AND data_lg BETWEEN '$_POST[date1]' AND '$_POST[date3]'";