2010-08-10 2 views
1

На моем сайте пользователи вводят несколько условий поиска. Каждое из этих условий поиска может возвращать 0 строк или возвращать несколько. Я выполняю UNION во всех поисках и получаю строки.LEFT JOIN строки

Для меня гораздо легче, если я могу получить все поисковые запросы в ответе, независимо от того, вернут ли они какие-либо строки. Есть ли способ по существу LEFT JOIN строку (в данном случае поисковый запрос) для запроса SELECT?

Более обновление информации:

У меня есть таблица Книги с поля Title.

Пользователь вводит до 10 имен search_terms, и в настоящее время я выполняю UNION на всех этих элементах, чтобы получить соответствующие строки. Так как

SELECT $s[0] AS Search_Term,* WHERE Title LIKE '%$s[0]%' UNION 
SELECT $s[1] AS Search_Term,* WHERE Title LIKE '%$s[1]%' ...etc 

Я хотел бы это так, что если нет результатов для данного поиска, я все еще получаю search_term назад вместе с заглавной NULL.

ответ

1

Вы можете использовать Full Text Search (FTS) Таким образом, если вы конкатенации значения массива вместе:

SELECT x.searchterm, 
      b.* 
    FROM (SELECT $s[0 ... 20] AS search_term) x 
LEFT JOIN BOOKS b ON MATCHES(b.title) AGAINST (x.searchterm) 

$s[0 ... 20] является заполнителем для условий поиска объединяются в одну строку, разделяя каждый член с космический характер.

LEFT JOIN гарантирует, что вы получите свой поисковый запрос и NULL для остальных столбцов, если ничего не соответствует.

4

Я думаю, что это то, что он хочет:

--Results--

Search Term____Title________________________________Author______Call No 
cats   How to Care for Millions of Cats  JohnB  B.342 
kittens  Why Kittens are your only Friends Old Lady L.4239 
rabies   null         null  null 

etc. 

Может быть что-то вроде этого:

SELECT 
    CASE count 
    count > 0 
     'Search Term', books.title 'Title', books.author 'Author', books.call_no 'Call No' 
    count <= 0 
     'Search term 1' 
    END CASE 
FROM 
    (SELECT COUNT('Search term 1') count, 'Search term 1' 'Search Term' ,* 
    FROM books 
    WHERE books.title LIKE 'Search term 1'); 

(вы должны работать перегибов out))

+0

Я хочу, чтобы поисковый термин в результатах, даже если facts.description! = Поисковый запрос – babonk

+2

@babonk, не нужно проголосовать, я пытаюсь помочь! Вы вряд ли представили какие-либо подробности; ваш вопрос был расплывчатым !! – JohnB

+0

@JohnB: Я добавил дополнительную информацию по запросу и т. Д. Извините, что вопрос неопределенный. – babonk

0

Условия участия работают так же, как и в условиях WHERE, вы можете использовать " LIKE "или" = ", чтобы присоединиться к условию по вашему выбору. Если вам нужна более подробная информация, мне понадобятся некоторые примеры запросов и определения таблиц.

+0

Я добавил дополнительную информацию к вопросу .. – babonk

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