2010-08-10 50 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