2010-08-10 32 views
1

在我的网站上,用户输入了多个搜索词。这些搜索条件中的每一个都可能返回0行,或返回几个。我在所有搜索上执行联合并获取行。左连接字符串

如果我可以在响应中获得所有搜索条件,无论它们是否返回任何行,对我来说事情都容易得多。有没有一种方法基本上左加入一个字符串(在这种情况下,搜索词)到一个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回来的空标题一起。

回答

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。

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

(你必须要继续扭结虽然)

+0

我想要结果中的搜索字词,即使facts.description!=搜索字词 – babonk 2010-08-10 00:40:09

+2

@babonk,无需向下投票,我正在尝试帮助!你几乎没有提供任何细节。你的问题是模糊的! – JohnB 2010-08-10 00:41:26

+0

@JohnB:我在查询中添加了更多信息,等等。对不起,问题模糊 – babonk 2010-08-10 00:45:07

0

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

+0

我已经添加更多信息的问题.. – babonk 2010-08-10 00:47:12