LEFT JOIN一个字符串

时间:2010-08-10 00:32:32

标签: sql mysql select left-join

在我的网站上,用户输入多个搜索字词。这些搜索词中的每一个都可以返回0行,或者返回几行。我在所有搜索上执行UNION并获取行。

如果我能在响应中获得所有搜索词,那么对我来说容易得多,无论他们是否返回任何行。有没有办法将字符串LEFT JOIN(在本例中为搜索项)连接到SELECT查询?

更多信息更新:

我有一个表格带有标题的书籍。

用户最多输入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 个答案:

答案 0 :(得分:4)

我认为这就是他想要的:

- 结果 -

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 :(得分:1)

如果将数组值连接在一起,可以这种方式使用全文搜索(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。

答案 2 :(得分:0)

加入条件就像WHERE条件一样工作,你可以使用“LIKE”或“=”加入你选择的条件。如果您需要更多细节,我需要一些查询示例和表定义。