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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как сделать запрос к двум таблицам?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
new01
Отправлено: 16 Ноября, 2011 - 14:13:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 301
Дата рег-ции: Июнь 2010  
Откуда: Челябинск


Помог: 1 раз(а)




Вот у меня есть две таблицы. В каждой из них есть поле 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? Заранее спасибо!


-----
new01
 
 Top
LIME
Отправлено: 16 Ноября, 2011 - 14:17:52
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id FROM Table1 WHERE id>'560'
  2. UNION
  3. SELECT id FROM Table2 WHERE id>'100'
 
 Top
EuGen Администратор
Отправлено: 16 Ноября, 2011 - 14:21:01
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Правильнее, исходя из задачи:
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


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
new01
Отправлено: 16 Ноября, 2011 - 14:24:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 301
Дата рег-ции: Июнь 2010  
Откуда: Челябинск


Помог: 1 раз(а)




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.


-----
new01
 
 Top
LIME
Отправлено: 16 Ноября, 2011 - 14:26:54
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




new01 только выше указали правильное замечание про ALL иначе будет дистинкт по умолчанию
и вообще чем вариант евгена не угодил?
 
 Top
new01
Отправлено: 16 Ноября, 2011 - 14:35:44
Post Id



Посетитель


Покинул форум
Сообщений всего: 301
Дата рег-ции: Июнь 2010  
Откуда: Челябинск


Помог: 1 раз(а)




LIME, Я просто не заметил сортировку у EuGen. Вот у меня небольшая проблема возникла. Мне надо колонку получить из каждой таблицы не только id. Но проблема в том, что они разные. И в ответе мне показывают только колонки к примеру из первой таблицы. Как сделать чтоб были все колонки?
Пишет ошибку разное количество колонок:
1222 - The used SELECT statements have a different number of columns

(Отредактировано автором: 16 Ноября, 2011 - 14:36:53)



-----
new01
 
 Top
LIME
Отправлено: 16 Ноября, 2011 - 14:40:55
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




так?
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
 
 Top
new01
Отправлено: 16 Ноября, 2011 - 14:42:02
Post Id



Посетитель


Покинул форум
Сообщений всего: 301
Дата рег-ции: Июнь 2010  
Откуда: Челябинск


Помог: 1 раз(а)




LIME, да, спасибо Улыбка
(Добавление)
LIME, а что значит AS tralala?


-----
new01
 
 Top
LIME
Отправлено: 16 Ноября, 2011 - 14:46:18
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




new01 можно AS my_name
просто аналогичные поля но с разным названием переименовываем
 
 Top
new01
Отправлено: 16 Ноября, 2011 - 14:51:17
Post Id



Посетитель


Покинул форум
Сообщений всего: 301
Дата рег-ции: Июнь 2010  
Откуда: Челябинск


Помог: 1 раз(а)




LIME, что-то я запутался. В первой таблице 5 полей надо получить, во второй 4, при этом в первой и во второ 3 поля одинаковые.


-----
new01
 
 Top
LIME
Отправлено: 16 Ноября, 2011 - 14:56:27
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




тогда выводишь пять из одной
3 из другой и переименовываешь которые надо
а которых не хватает можно добавить так
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id, name1, name2, 'пишем что хотим' AS name3

внимание кавычки обычные
просто можно заполнить недостающие поля строковой константой
 
 Top
new01
Отправлено: 16 Ноября, 2011 - 15:01:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 301
Дата рег-ции: Июнь 2010  
Откуда: Челябинск


Помог: 1 раз(а)




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.  


-----
new01
 
 Top
snikers987
Отправлено: 16 Ноября, 2011 - 15:03:52
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




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.  


Не?

(Отредактировано автором: 16 Ноября, 2011 - 15:05:14)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
LIME
Отправлено: 16 Ноября, 2011 - 15:04:30
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




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 не тынепонял
 
 Top
snikers987
Отправлено: 16 Ноября, 2011 - 15:07:43
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




при UNION вроде количество получаемх полей из всех запросов должно быть одинаковым..или нет?


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB