2014-04-01 80 views
0

有沒有一種方法可以選擇其中一列只包含預定義值的行?我一直在使用它,但它返回的是我的列中至少包含一個值的任何行(這正是它想要做的,我知道)。但是我正在尋找一種方法來只選擇在關鍵字列中只有我的關鍵字的行。MySQL選擇列只包含集合中的值的行

SELECT * 
FROM 
    `products`.`product` 
WHERE 
    keywords LIKE '%chocolate%' 
AND keyword LIKE '%vanilla%'; 

我找點事做這個

SELECT * 
FROM 
    `products`.`product` 
WHERE 
    keywords **ONLY** LIKE '%chocolate%' 
OR keyword LIKE '%vanilla%'; 

我試過最有意義這個問題上,希望有人給我一個神奇的解決方案!

UPDATE /例子: 關鍵詞:巧克力,糖,牛奶,燕麥

使用上面的關鍵詞,我想前兩個返回的結果,但不是最後兩個:

產品1:巧克力,糖 產品2:巧克力 產品3:巧克力,糖,牛奶,燕麥,麥麩 產品4:巧克力,糖,鹽

我列包含適用於該產品行的所有關鍵字的逗號分隔的列表。

+0

它只是'chocolate'而不是'東西巧克力else',對不對?完全匹配這個詞? – PlantTheIdea

+0

你可以分享一些樣本數據嗎?我不確定我瞭解'keyword'列的樣子。 – Mureinik

+0

一個更簡單的方法來解釋你想要的是給予預期的結果 - 並顯示可能3行 - 一個會匹配和兩個不應該。 –

回答

0
SELECT * FROM `products`.`product` WHERE keywords = 'chocolate' OR keyword = 'vanilla'; 

從您提供的信息中可以做到您想要的 - 或者還有更多嗎?

+0

更多我想,假設我有10個關鍵字,我想要返回僅包含列表中的關鍵字的產品,但其中包含任意數量的關鍵字。它看起來像是在做我現在擁有的產品,它會返回至少包含一個關鍵字的產品。任何改進?謝謝! – loopifnil

0

這個怎麼樣:

SELECT * 
FROM `products`.`product` 
WHERE (keywords LIKE '%chocolate%' AND keyword NOT LIKE '%vanilla%') 
OR (keywords NOT LIKE '%chocolate%' AND keyword LIKE '%vanilla%'); 
+0

我認爲這是符合你的願望的。不是嗎? –

+0

這是正確的想法,但我會在運行時使用填充的關鍵字列表,並且可能會很長。假設我有10個關鍵字,我想要返回僅包含列表中關鍵字的產品,但其中包含任意數量的關鍵字。 – loopifnil

相關問題