Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: select тройной??
 
 автор: Alex Boxgorn   (02.11.2009 в 11:05)   письмо автору
 
 

Есть таблица №1
Поле ID тип INT
Поле KOLICHESTVO тип VARCHAR
таблица №2
Поле IDPRICE тип INT
Поле IDRABOTA тип INT
таблица №3
Поле ID3 тип INT
Как выбрать все записи с количеством поле KOLICHESTVO не равным пустому также выбрать из таблицы 2 ID=IDPRICE и дальше выбрать в таблице 3 IDRABOTA=ID3
Т.е. получается нужно выбрать в табилце 1 записи с количеством не равным пустому, на основе этого результата выбрать из таблицы 2 и на основе результата выбора из таблицы 2 нужно выбрать данные в таблице 3.
Т.е. связь полей таблиц такая ID -->IDPRICE, IDRABOTA-->ID3

  Ответить  
 
 автор: Trianon   (02.11.2009 в 14:11)   письмо автору
 
   для: Alex Boxgorn   (02.11.2009 в 11:05)
 

А хотя бы первый шаг Вы можете записать в виде запроса?

  Ответить  
 
 автор: Alex Boxgorn   (02.11.2009 в 14:27)   письмо автору
 
   для: Trianon   (02.11.2009 в 14:11)
 

С удовольствием!
SELECT p.nazvanie, p.kolichestvo,  s.idprice, f.id3 
FROM tabl1 AS p 
LEFT JOIN tabl2 AS s ON s.idprice = p.id 
LEFT JOIN tabl3 AS f ON f.id3 = s.idrabota  WHERE kolichestvo <> ''

Вот так я предполагал построить запрос, но по результатам запроса, происходит склеивание первой и второй таблиц правильно, а из третьей таблицы как-то странно выбирается. Скорее сказать из третьей таблицы не верно выбирается. Вот я и хочу, чтобы после селект по третьей таблице все-таки правильно сработал. А как это сделать не соображу.
Видел как-то делают select в select-е но это уж пока за гранью моего понимания - как это работает.

  Ответить  
 
 автор: Trianon   (02.11.2009 в 14:30)   письмо автору
 
   для: Alex Boxgorn   (02.11.2009 в 14:27)
 

Все правильно написано.
Только лучше бы Вы перенесли запрос на несколько строк - так его и читать невозможно, и на реплику ответить не нормально получается.

"как-то странно выбирается" не говорит ни о чем.

  Ответить  
 
 автор: Alex Boxgorn   (02.11.2009 в 14:31)   письмо автору
 
   для: Trianon   (02.11.2009 в 14:30)
 

Блин, а как теперь его перенести? Правка больше после вашего ответа не доступна.

  Ответить  
 
 автор: Trianon   (02.11.2009 в 14:33)   письмо автору
 
   для: Alex Boxgorn   (02.11.2009 в 14:31)
 

правьте

  Ответить  
 
 автор: Alex Boxgorn   (02.11.2009 в 14:37)   письмо автору
 
   для: Trianon   (02.11.2009 в 14:33)
 

Готово!!

  Ответить  
 
 автор: Alex Boxgorn   (02.11.2009 в 14:40)   письмо автору
 
   для: Alex Boxgorn   (02.11.2009 в 14:37)
 

Чтобы еще более понятно было, я разложу запрос на подзадачи, которые должны были выпониться одним селектом.

SELECT p.nazvanie, p.kolichestvo,  s.idprice, s.idrabota  
FROM tabl1 AS p  
LEFT JOIN tabl2 AS s ON s.idprice = p.id  WHERE p.kolichestvo <> ''


и на основе этой получившейся таблицы сделать нижеследуещее

SELECT p.nazvanie, p.kolichestvo,  p.idprice, p.idrabota  FROM tabl1 AS p
LEFT JOIN tabl3 AS f ON f.id3 = p.idrabota  WHERE p.kolichestvo <> ''


В результате получится нужная мне выборка

  Ответить  
 
 автор: Trianon   (02.11.2009 в 15:20)   письмо автору
 
   для: Alex Boxgorn   (02.11.2009 в 14:40)
 

Запрос (02.11.2009 в 14:27) делает именно то, что Вы хотите.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования