MySQL:一種更有效的多字串 find_in_set 方法
MySQL 的 find_in_set
函數僅限於逗號分隔值內的單一字串搜尋。 當需要同時查找與多個搜尋字串相符的記錄時,這提出了挑戰。
挑戰:
目標是識別包含逗號分隔值的欄位包含所有指定搜尋字串的記錄。 例如,在「a,b,c,d」中搜尋「a,b,c」應該會產生匹配。
卓越的解決方案:
不是使用 find_in_set
運算子連結多個 OR
呼叫(這可能效率低下),更有效的方法是在更結構化的 FIND_IN_SET
子句中利用 WHERE
函數:
<code class="language-sql">WHERE FIND_IN_SET('val1', setcolumn) > 0 AND FIND_IN_SET('val2', setcolumn) > 0 AND FIND_IN_SET('val3', setcolumn) > 0</code>
地點:
setcolumn
表示以逗號分隔值的欄位。 val1
、val2
、val3
等是搜尋字串。 說明:
此方法使用 AND
來確保 所有 搜尋字串都存在於 setcolumn
中。 如果找到字串,每個 FIND_IN_SET
呼叫都會傳回一個位置(大於 0 的值);否則,傳回 0。 AND
條件保證只會傳回包含所有指定字串的記錄。
範例:
<code class="language-sql">SELECT * FROM table WHERE FIND_IN_SET('a', setcolumn) > 0 AND FIND_IN_SET('b', setcolumn) > 0 AND FIND_IN_SET('c', setcolumn) > 0;</code>
此查詢將只傳回 setcolumn
包含「a」、「b」和「c」的記錄。
重要注意事項:
雖然此方法通常比 REGEXP 方法更有效,但請記住,在資料庫欄位中儲存逗號分隔值通常被認為是糟糕的資料庫設計。規範化資料庫(建立單獨的表來表示關係)對於效能和資料完整性來說是一個更好的長期解決方案。 這種方法主要是針對現有的非標準化資料的解決方法。
以上是如何在逗號分隔的 MySQL 欄位中有效率地搜尋多個字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!