直接回答你的問題,你的查詢需要看起來像這樣
SELECT *
FROM mytable
WHERE places LIKE('%toronto%')
但是,要知道,像()是緩慢的。
要間接回答你的問題,你的數據庫模式都是錯誤的。這不是做M:N(多對多)關係的正確方法。
想象一下,而不是你有這個
mytable place mytable_place
+------------+ +----------+----------+ +------------+----------+
| mytable_id | | place_id | name | | mytable_id | place_id |
+------------+ +----------+----------+ +------------+----------+
| 1 | | 1 | new york | | 1 | 1 |
| 2 | | 2 | toronto | | 1 | 2 |
| 3 | | 3 | london | | 1 | 3 |
+------------+ +----------+----------+ | 2 | 2 |
| 3 | 1 |
| 3 | 3 |
+------------+----------+
表mytable_places
是所謂的查找表(或外部參照/交叉引用表,或相關表)。它唯一的工作是跟蹤哪些記錄有哪些mytable
記錄,反之亦然。
從這個例子我們可以看出,第1 mytable
記錄有所有3米的地方,第二個只有多倫多,和第三有紐約和倫敦。
這也爲您打開了各種各樣的查詢,這些查詢對您當前的設計來說很困難,昂貴或不可能。
想知道有多少mytable
記錄有多倫多?沒問題
SELECT COUNT(*)
FROM mytable_place x
LEFT JOIN place p
ON p.place_id = x.place_id
WHERE p.name = 'toronto';
怎麼樣的mytable
記錄每個地方的數量,排序?
SELECT p.name
, COUNT(*) as `count`
FROM mytable_place x
LEFT JOIN place p
ON p.place_id = x.place_id
GROUP BY p.place_id
ORDER BY `count` DESC, p.name ASC
,這些都是會使用LIKE比任何查詢更快多因爲它們可以在諸如place.name
列使用索引。
這可以使用一些代碼格式化... http://stackoverflow.com/editing-help – 2010-04-08 15:44:10
我同意Justin Ethier。但是,如果你不得不查看LOCATE函數http://dev.mysql.com/doc/refman/4.1/en/string-functions.html#function_locate – 2010-04-08 15:50:28