sql - метод поиска из 2 таблиц - PullRequest
2 голосов
/ 06 октября 2011

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

Я хочу вернуть полный набор результатов из одного запроса, но новая информация касается (через id) только тех данных в другой таблице, которые я хочу вернуть.

У меня сейчас есть

SELECT      *
FROM        [TABLE]
WHERE       ( LOWER(title) LIKE '%$search%'
              OR LOWER(contents) LIKE '%$search%'
            )
            AND type = 'product'

в другой таблице есть столбец с именем id (такой же, как и другие, которые связаны) и другое значение meta_value.

Я хочу не только выполнить описанную выше операцию, но и выполнить поиск в данных meta_value, если при совпадении получаются результаты из другой таблицы (с использованием идентификатора).

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

Ответы [ 3 ]

1 голос
/ 06 октября 2011

Ваш вопрос немного сложен для понимания, но вот мой ответ. Похоже, что вы хотите присоединиться к ID, который может или не может существовать в «другой таблице». Просто используйте LEFT JOIN для этого:

SELECT      *
FROM        [TABLE]
LEFT JOIN   [OTHER_TABLE] ON [OTHER_TABLE].ID = [TABLE].ID
WHERE       (
              LOWER(title) LIKE '%$search%'
              OR LOWER(contents) LIKE '%$search%'
              OR LOWER(ISNULL([OTHER_TABLE].meta_value, '')) LIKE '%$search%'
            )
            AND type = 'product'
0 голосов
/ 06 октября 2011

Это сработало, используя 2 примера выше:

SELECT * 
FROM  `ecom_page_data` t
LEFT JOIN  `ecom_page_meta` t2 ON t.id = t2.post_id
WHERE
( 
    ( LOWER( t.title ) LIKE  '%RE9901%'
      OR LOWER( t.contents ) LIKE  '%RE9901%'   
      OR LOWER( t2.meta_value ) LIKE  '%RE9901%'
    ) 
    AND t.type = 'product' AND t2.meta_name = 'single-text-input-product-part-number'
)

Спасибо всем большое

0 голосов
/ 06 октября 2011

Вы можете объединить две таблицы, используя их идентификаторы, используя команду LEFT JOIN. Затем можно выполнить фильтрацию по столбцам в любой таблице.

SELECT *
FROM [TABLE] t1
LEFT JOIN otherTable t2 on t1.ID=t2.ID
WHERE
  (
    LOWER(t1.title) LIKE '%$search%' 
    OR LOWER(t1.contents) LIKE '%$search%'
    OR LOWER(t2.meta_value) LIKE '%$search%'
  )
  AND t1.type = 'product'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...