2010-09-02 2 views
1

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

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

Спасибо!

$q = "SELECT DISTINCT item.* 
      FROM item, item_people, people 
      WHERE item.record_id = item_people.item_id AND people.record_id = item_people.people_id 
      AND 
      item.live = '1' 
      AND 
      (concat_ws(' ',people.name_first,people.name) LIKE '%$search_param%' OR 
      item.name_title LIKE '%$search_param%' OR 
      item.city = '$search_param' OR 
      item.category LIKE '%$search_param%' OR 
      item.on_lists LIKE '%$search_param%') 
      $limit"; 

ответ

1

Вам понадобится OUTER JOIN, чтобы возвращать товары без связанных с ними людей.

SELECT DISTINCT item.* /*But don't use *! 
         */ 
FROM item 
    LEFT OUTER JOIN item_people 
    ON item.record_id = item_people.item_id 
    LEFT OUTER JOIN people 
    ON people.record_id = item_people.people_id 
WHERE item.live = '1' 
AND 
    (
     concat_ws(' ',people.name_first,people.name) LIKE '%$search_param%' 
    OR item.name_title LIKE '%$search_param%' 
    OR item.city = '$search_param' 
    OR item.category LIKE '%$search_param%' 
    OR item.on_lists LIKE '%$search_param%' 
    ) 
    $limit 
+0

Вы абсолютно правы. Огромное спасибо. Что вы подразумеваете под "/ * Но не используйте *! * /" Когда я снял первую звездочку, запрос не удался. Еще раз спасибо! – user438204

+0

@user - Ах, извините за путаницу. Лучше перечислить имена столбцов явно, а не использовать '*'. ** См.: [Ссылка на связанный вопрос] (http://stackoverflow.com/questions/65512/which-is-faster-best-select-or-select-column1-colum2-column3-etc) ** –

Смежные вопросы