我使用下面的查詢(簡化了這裏)檢查一個字符串包含了「看字」裏的手錶字包含在一個MySQL表短語:檢查字符串包括從數據庫
$sql = "SELECT ww_id FROM watch_words WHERE ww_word IN (" . $string . ")";
這適用於單個單詞,但現在我需要使它適用於短語(即字段ww_word可能包含多個單詞)。我能想到的只是將整個表格讀入一個數組,然後用多個循環與字符串中的單詞組合進行比較,但我確信(希望)有更好的方法。
編輯:感謝您的建議,但正如邁克布蘭特指出的,針是在MySQL和PHP中的乾草堆 - 而不是「通常」的方式(比如搜索表單)。我需要檢查一個字符串(實際上是一條消息)是否包含一個或多個「監視短語」 - 就像一個壞語言過濾器(但不是那樣)。
樣品臺這樣的:
CREATE TABLE `watch_words` (
`ww_id` int(11) NOT NULL AUTO_INCREMENT,
`ww_word` varchar(250) NOT NULL,
PRIMARY KEY (`ww_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `watch_words` VALUES (1, 'foo bar');
INSERT INTO `watch_words` VALUES (2, 'nice sunny day');
INSERT INTO `watch_words` VALUES (3, 'whatever');
INSERT INTO `watch_words` VALUES (4, 'my full name here');
INSERT INTO `watch_words` VALUES (5, 'keyword');
所以字符串「我們現在有一個很好的陽光燦爛的日子」應該返回匹配,而「多可愛的陽光燦爛的日子......」不會。 TIA。
另外值得注意的是,在LIKE中以通配符($ _)開頭會阻止使用索引,因此這可能會影響大型表上的性能。 – twoleggedhorse
我也建議調查MATCH AGAINST。如果你有多個LIKE字樣,你需要做一些類似'ww_word' LIKE'%「。$ word1。」%'或'ww_word' LIKE'%「。$ word2。」%'等 –
謝謝,我會測試。我認爲這隻會反過來工作(即如果數據庫包含字符串和短語搜索)。我正在搜索消息,看看它們是否包含某些短語(比如一個不好的警告類的事情,但不是這樣)。 – da5id