ЛЕВОЕ СОЕДИНЕНИЕ строки - PullRequest
       7

ЛЕВОЕ СОЕДИНЕНИЕ строки

1 голос
/ 10 августа 2010

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

Мне гораздо легче, если я могу получить все поисковые термины в ответе, независимо от того, возвращают ли они какие-либо строки.Есть ли способ по существу присоединиться к строке (в данном случае поисковому запросу) к запросу 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.

Ответы [ 3 ]

4 голосов
/ 10 августа 2010

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

- Результаты -

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');

(хотя вам придется разбираться с изломами)

1 голос
/ 10 августа 2010

Вы можете использовать полнотекстовый поиск (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 для остальных столбцов, если ничего не найдено.

0 голосов
/ 10 августа 2010

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

...