我有以下查詢。它選擇標題中包含綠色,藍色或紅色字樣的所有帖子。按正則表達式匹配次數排序mysql結果
SELECT ID,標題從帖子裏的標題REGEXP「(綠色|藍色|紅)」
我想結果以這樣的方式進行排序,標題最匹配(所有三個詞),因此是最相關的一個,首先列出。在這種情況下,這可能嗎?如果是這樣,我會怎麼繼續呢?
謝謝
我有以下查詢。它選擇標題中包含綠色,藍色或紅色字樣的所有帖子。按正則表達式匹配次數排序mysql結果
SELECT ID,標題從帖子裏的標題REGEXP「(綠色|藍色|紅)」
我想結果以這樣的方式進行排序,標題最匹配(所有三個詞),因此是最相關的一個,首先列出。在這種情況下,這可能嗎?如果是這樣,我會怎麼繼續呢?
謝謝
你必須拆分正則表達式。無論是不同的情況或不同的查詢:
SELECT COUNT(results.username) as count, results.* FROM (
SELECT * FROM `post` WHERE `title` LIKE "%blue%"
UNION SELECT * FROM `post` WHERE `title` LIKE "%red%"
UNION SELECT * FROM `post` WHERE `title` LIKE "%green%"
) as results GROUP BY results.title ORDER BY count DESC;
注:我用LIKE
代替REGEXP
,becouse當你分割的條件,你不會需要它了,根據你的榜樣。 LIKE
比正則表達式要快一點,但是如果你的模式更復雜,那麼你總是可以將它替換回來。
正如[Alma Do's answer]中所述(http://stackoverflow.com/a/20467825/1697320),你最好用FULLTEXT。 –
'SELECT id,title FROM post ORDER BY FIELD(color,'green','blue','red')' – 7alhashmi