我在查找返回mySQL數據庫中的文本字段中找到的匹配單詞列表的查詢。訣竅是文本字段包含多個我不想返回的其他單詞。mySQL返回文本字段中的單詞列表
以汽車數據庫爲例,其中「顏色」文本字段包含汽車上的所有顏色。
說我們有在「顏色」字段包含這些條目行:
"candy apple red, black"
"reddish brown"
"sunset red, white"
"Purple, Cherry red, pink polkadots"
"white"
"sunset red"
我可以這樣做:
SELECT colours from CARS WHERE colours REGEXP 'red'
返回所有在它有「紅色」的地方行,但它會返回該字段中的所有內容。
訣竅是我想要的結果列表看起來像這樣:
"candy apple red"
"reddish brown"
"sunset red"
"cherry red"
目前我使用PHP來從服務器獲取完整的結果列表考慮,然後通過從列表中工作那裏。但是,如果數據庫變大,這可能會花費很多。
謝謝!
編輯:
這裏是部分答案只包括在任何「顏色」字段中發現的第一個顏色(和刪除重複),這不是太討厭查詢:
SELECT distinct
TRIM(CONCAT(SUBSTRING_INDEX(SUBSTRING(colours, 1, LOCATE('red',colours)-1), ',' , -1),
SUBSTRING_INDEX(SUBSTRING(colours, LOCATE('red',colours)), ',' , 1)))as found
FROM CARS
WHERE colours REGEXP 'red'
理想情況下,我們可以將此擴展爲也解決了一個字段中的多個事件。例如,如果我們有這樣一個領域:「紫,櫻桃紅,粉色polkadots,夕陽紅」
您不應該將事物列表存儲在字符串變量中。您應該使用關聯/聯結表。 –
@戈登,真的,但不幸的是不是它完成的方式。 –