2013-02-27 46 views
0

表中的articles兩個字段:選擇使用情況顯示所有結果

titlebody

兩個記錄:

meow bark | 1234 5678bird snake | 8596 2952

meow barktitle1234 5678是下body等...

SQL查詢:

SELECT *, 
     CASE WHEN title = 'meow' then 1 else 0 end + CASE WHEN title = 'bark' then 1 else 0 end AS matches 
FROM articles 
ORDER BY matches DESC 

返回兩行。請幫我理解我的語法有什麼問題。我期待它只返回標題與查詢中的內容相匹配的行。除非我不明白CASE是如何工作的,否則,如果上述示例中的標題匹配喵喵聲或樹皮,則應顯示 - 否則,不顯示。

目標是根據大多數匹配返回結果。在小提琴看看這裏:http://sqlfiddle.com/#!3/13b33/10

我稍微修改它,沒有足夠的想法來打破它。

+0

好吧 - 這就是發生了什麼,但你要返回什麼? – whytheq 2013-02-27 22:15:26

+0

我的歉意,我已經在標題欄中更新了 – 2013-02-27 22:19:13

+0

這個問題,它實際上是說'喵吠'還是說'喵'**或**'樹皮'? – whytheq 2013-02-27 22:24:28

回答

3

不確定你想達到什麼......你想什麼要返回

這可能是有點接近你想要什麼

SELECT *, 
     matches = CASE WHEN title LIKE '%meow5' THEN 1 ELSE 0 END + CASE WHEN title LIKE '%bark5' THEN 1 ELSE 0 END 
FROM articles 
ORDER BY matches desc 

編輯OP已經更新

如果您只想要返回一些記錄,請嘗試使用WHERE子句:

SELECT * 
FROM articles 
WHERE title LIKE '%meow%' 
     OR 
     title LIKE '%bark%' 
ORDER BY matches desc 

最後編輯

Try this fiddle

萬一小提琴去過時這裏是腳本:

CREATE TABLE YourTable (FieldToSearch varchar(max)); 
INSERT INTO YourTable 
VALUES 
('If there were a dog'), 
('If there was a dog'), 
('If that dog died!'), 
('I''d be happy with cat'); 

SELECT x.* 
FROM (
     SELECT FieldToSearch, 
     CASE WHEN ' ' + FieldToSearch + ' ' like '% if %' then 1 else 0 end 
     + CASE WHEN ' ' + FieldToSearch + ' ' like '% there %' then 1 else 0 end 
     + CASE WHEN ' ' + FieldToSearch + ' ' like '% was %' then 1 else 0 end 
     + CASE WHEN ' ' + FieldToSearch + ' ' like '% a %' then 1 else 0 end 
     + CASE WHEN ' ' + FieldToSearch + ' ' like '% dog %' then 1 else 0 end AS matches 
     FROM YourTable 
    )x 
WHERE x.matches >0 
ORDER BY x.matches DESC; 
+0

+1,但你仍然需要第二個查詢中的匹配表達式爲了ORDER BY。 – 2013-02-27 22:39:31

+0

@AaronBertrand - 我添加了一個小提琴的鏈接 - 我現在要修改它 – whytheq 2013-02-27 22:45:32

3

如果要排除行,則需要將其放在WHERE子句中而不是SELECT子句中。

此外,您正在使用的比較爲等同於。如果列中包含您的搜索值,則這不會「匹配」,正如您似乎認爲的那樣,但僅當列具有完全相同的文本並且沒有其他內容時(具有一些小的排序餘量)。

+0

+1就像那樣簡單 – whytheq 2013-02-27 22:23:16

0

你沒有在那裏查詢提到的條款,這將獲取所有記錄,除非你使用條件篩選它們