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

Форум MySQL

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

 

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

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

тема: Выборка из двух таблиц, из которых одна основная
 
 автор: Zilog   (02.12.2009 в 21:59)   письмо автору
 
 

Как заполучить все записи из таблицы tabA и tabB удовлетворяющие след. критериям
tabA.a_id = N
tabB.a_id = tabA.a_ID
tabB.name = 'test'

учитывая, что записи в tabB ссылающейся на tabA может не оказаться. То есть, строка из таблицы А должна вернуться в любом случае (если a_id = N), независимо от того, существует ли соответствующая строка во второй таблице. А из второй таблицы строка должна вернуться по 2-ум критериям.

Как я понял, копать надо в сторону LEFT OUTER JOIN, но у меня не получается сделать проверку на второй критерий (tabB.name = 'test').

Как быть, м?

  Ответить  
 
 автор: Valick   (02.12.2009 в 22:35)   письмо автору
 
   для: Zilog   (02.12.2009 в 21:59)
 

ну так покажите запрос который у Вас почти работает

  Ответить  
 
 автор: Zilog   (02.12.2009 в 23:08)   письмо автору
 
   для: Valick   (02.12.2009 в 22:35)
 

SELECT * FROM fotobank_images AS image
LEFT OUTER JOIN fotobank_images_data AS idata
ON image.imageID=idata.imageID
WHERE
image.fbID='.$fbID.'

но в таком виде взвращаются все записи. а надо вставить проверку на то,что бы поле
idata.langID="en". Но этот вариант не пашет
...
ON image.imageID=idata.imageID
ON idata.langID="en"

  Ответить  
 
 автор: Valick   (02.12.2009 в 23:16)   письмо автору
 
   для: Zilog   (02.12.2009 в 23:08)
 

Разве
WHERE
image.fbID='.$fbID.' AND idata.langID="en"
не канает?

  Ответить  
 
 автор: Zilog   (02.12.2009 в 23:30)   письмо автору
 
   для: Valick   (02.12.2009 в 23:16)
 

>не канает?

эх, если бы канало. Если во второй таблице ничего походящего нет - и результат возвращается нулевой, хотя хочется всё равно получить весь подходящий список из первой таблицы.

  Ответить  
 
 автор: Zilog   (03.12.2009 в 00:14)   письмо автору
 
   для: Zilog   (02.12.2009 в 23:30)
 

мужики, подскажите, м? уже всю голову сломал.

  Ответить  
 
 автор: Zilog   (03.12.2009 в 01:24)   письмо автору
 
   для: Zilog   (03.12.2009 в 00:14)
 

так-с, ну с этой задачей я справился. всё возвращается как надо.

НО:
imageID data1 data2 someID imageID param1 param2
22 abc cba 4 NULL abc NULL


в результате у меня imageID - 2 раза. Как удалить второй, который NULL и портит всю картину?

  Ответить  
 
 автор: Trianon   (03.12.2009 в 01:53)   письмо автору
 
   для: Zilog   (03.12.2009 в 01:24)
 

>в результате у меня imageID - 2 раза. Как удалить второй, который NULL и портит всю картину?

В каком результате?
В результате какого запроса?:

  Ответить  
 
 автор: Zilog   (03.12.2009 в 02:05)   письмо автору
 
   для: Trianon   (03.12.2009 в 01:53)
 

>В каком результате?
>В результате какого запроса?:

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

  Ответить  
 
 автор: Trianon   (03.12.2009 в 02:08)   письмо автору
 
   для: Zilog   (03.12.2009 в 02:05)
 

>>В каком результате?
>>В результате какого запроса?:

>что надо конкретно вручную задавать, какие поля нужно заполучить, что бы столбцов-дублей не появлялось.

В каком именно запросе?
Если запрос вообще не написать - никаких столбцов точно не получится. В том числе и дублей.

  Ответить  
 
 автор: Trianon   (03.12.2009 в 01:52)   письмо автору
 
   для: Zilog   (02.12.2009 в 21:59)
 


...
FROM tabA 
  LEFT JOIN tabB ON tabB.a_id = tabA.a_ID AND tabB.name = 'test'
WHERE tabA.a_id = $N 

  Ответить  
 
 автор: Zilog   (03.12.2009 в 02:06)   письмо автору
 
   для: Trianon   (03.12.2009 в 01:52)
 

>

>...
>FROM tabA 
>  LEFT JOIN tabB ON ( tabB.a_id = tabA.a_ID AND tabB.name = 'test' )
>WHERE tabA.a_id = $N 


у меня это заработало только со скобками

  Ответить  
 
 автор: Trianon   (03.12.2009 в 02:33)   письмо автору
 
   для: Zilog   (03.12.2009 в 02:06)
 

Скобки там, конечно, можно поставить. Но по синтаксису они не требуются.
Точно также, как после LEFT не требуется слово OUTER .

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

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