Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как сделать запрос к двум таблицам?
Форумы портала PHP.SU » » Вопросы новичков » Как сделать запрос к двум таблицам?

Страниц (2): [1] 2 »
 

1. new01 - 16 Ноября, 2011 - 14:13:39 - перейти к сообщению
Вот у меня есть две таблицы. В каждой из них есть поле id. Задча: Надо извлчеь записи из каждой таблицы, гд е id больше определённого значения и потом всё это осортировать по полю id.
Сначала делаем запрос в две таблицы с опр. условием:
PHP:
скопировать код в буфер обмена
  1.  
  2. SELECT Table1.id,Table2.id FROM Table1,Table2 WHERE Table1.id>'560' and Table2.id>'100'  
  3.  

Получается таблица состоящая из двух одинаковых колонок(id,id). Почему так? А не сплошная таблица из одной колонки с id? Просто потом при сортировки он выдаёт ошибку: #1060 - Duplicate column name 'id'. Как сделать чтоб результатом такого запроса была таблица из одной колокни id, где были бы результаты и Table1 и Table2? Заранее спасибо!
2. LIME - 16 Ноября, 2011 - 14:17:52 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id FROM Table1 WHERE id>'560'
  2. UNION
  3. SELECT id FROM Table2 WHERE id>'100'
3. EuGen - 16 Ноября, 2011 - 14:21:01 - перейти к сообщению
Правильнее, исходя из задачи:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id FROM Table1 WHERE id>560
  2. UNION ALL
  3. SELECT id FROM Table2 WHERE id>100
  4. ORDER BY id
4. new01 - 16 Ноября, 2011 - 14:24:22 - перейти к сообщению
LIME,EuGen, спасибо огромное! Очень благодарен. всё получилось. Потом просто делаю вот так.
PHP:
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM(SELECT id FROM Table1 WHERE id>'560'
  3. UNION
  4. SELECT id FROM Table2 WHERE id>'100') AS x ORDER BY id
  5.  

И сортирую результаты по id.
5. LIME - 16 Ноября, 2011 - 14:26:54 - перейти к сообщению
new01 только выше указали правильное замечание про ALL иначе будет дистинкт по умолчанию
и вообще чем вариант евгена не угодил?
6. new01 - 16 Ноября, 2011 - 14:35:44 - перейти к сообщению
LIME, Я просто не заметил сортировку у EuGen. Вот у меня небольшая проблема возникла. Мне надо колонку получить из каждой таблицы не только id. Но проблема в том, что они разные. И в ответе мне показывают только колонки к примеру из первой таблицы. Как сделать чтоб были все колонки?
Пишет ошибку разное количество колонок:
1222 - The used SELECT statements have a different number of columns
7. LIME - 16 Ноября, 2011 - 14:40:55 - перейти к сообщению
так?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id,name AS tralala FROM Table1 WHERE id>560
  2. UNION ALL
  3. SELECT id,prise AS tralala FROM Table2 WHERE id>100
  4. ORDER BY id
8. new01 - 16 Ноября, 2011 - 14:42:02 - перейти к сообщению
LIME, да, спасибо Улыбка
(Добавление)
LIME, а что значит AS tralala?
9. LIME - 16 Ноября, 2011 - 14:46:18 - перейти к сообщению
new01 можно AS my_name
просто аналогичные поля но с разным названием переименовываем
10. new01 - 16 Ноября, 2011 - 14:51:17 - перейти к сообщению
LIME, что-то я запутался. В первой таблице 5 полей надо получить, во второй 4, при этом в первой и во второ 3 поля одинаковые.
11. LIME - 16 Ноября, 2011 - 14:56:27 - перейти к сообщению
тогда выводишь пять из одной
3 из другой и переименовываешь которые надо
а которых не хватает можно добавить так
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id, name1, name2, 'пишем что хотим' AS name3

внимание кавычки обычные
просто можно заполнить недостающие поля строковой константой
12. new01 - 16 Ноября, 2011 - 15:01:11 - перейти к сообщению
LIME, делаю так, но ошибка
PHP:
скопировать код в буфер обмена
  1.  
  2. SELECT id,Message,Nameuser,Wata,Nametema  FROM Table1 WHERE id>560
  3. UNION ALL
  4. SELECT id,Message,Nameuser,Color  'ааа' AS name3 FROM Table2 WHERE id>100
  5. ORDER BY id
  6.  
13. snikers987 - 16 Ноября, 2011 - 15:03:52 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT t1.id, t1.field2, t1.field3, t2.id, t2.field2 FROM t1
  3. INNER JOIN t2 USING(id)
  4. WHERE id>100 AND ORDER BY id
  5.  
  6.  


Не?
14. LIME - 16 Ноября, 2011 - 15:04:30 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1.  SELECT id,Message,Nameuser,Wata,Nametema  FROM Table1 WHERE id>560
  2. UNION ALL
  3. SELECT id,Message,Nameuser,Color AS  Wata, 'ааа' AS Nametema FROM Table2 WHERE id>100
  4. ORDER BY id
  5.  
есть теги для SQL специальные
(Добавление)
snikers987 не тынепонял
15. snikers987 - 16 Ноября, 2011 - 15:07:43 - перейти к сообщению
при UNION вроде количество получаемх полей из всех запросов должно быть одинаковым..или нет?

 

Powered by ExBB FM 1.0 RC1