2013-08-27 67 views
0

我有以下格式的MySQL查詢匹配LIKE statments數量:總結在一個MySQL查詢

SELECT * 
FROM `table` 
WHERE `val1` IN (x,y,z) 
AND (
    `val2` LIKE '%a%' OR 
    `val2` LIKE '%b%' OR 
    `val2` LIKE '%c%' OR 
    ... 
    `val2` LIKE '%x%' 
) 

,我想要做的就是加起來的時間的LIKE語句進行匹配的數量是什麼。例如,如果找到與a,e和y相匹配的總數,那麼總數就是3,然後我可以使用ORDER BY以最「命中」的行進行搜索。

編輯:我想在我的查詢中使用%作爲&作爲通配符。

+0

爲什麼那些喜歡?你是否試圖使用'&'作爲文字項目,因爲'LIKE'接受的唯一兩個通配符是'%'和'_'?看起來像你可以很容易地寫'val2 IN('&a&','&b&'...)'或者像'val2 REGEXP'&。&'' –

+0

那樣做正則表達式匹配在我急着寫下我想用的%與&。我使用%而不是作爲通配符。 – user2126881

回答

0

你可以只添加它們一起在MySQL:

SELECT *, 
     ((`val2` LIKE '&a&') + 
     (`val2` LIKE '&b&') + 
     (`val2` LIKE '&c&') + 
     ... 
     ) as nummatches 
FROM `table` 
WHERE `val1` IN (x,y,z) 
AND (
    `val2` LIKE '&a&' OR 
    `val2` LIKE '&b&' OR 
    `val2` LIKE '&c&' OR 
    ... 
    `val2` LIKE '&x&' 
) 

事實上,你可以簡化查詢:

SELECT *, 
     ((`val2` LIKE '&a&') + 
     (`val2` LIKE '&b&') + 
     (`val2` LIKE '&c&') + 
     ... 
     ) as nummatches 
FROM `table` 
WHERE `val1` IN (x,y,z) 
having nummatches > 0; 
+0

非常感謝。完美工作。 – user2126881