我有一個orders
表與一些items
涉及到每一個訂單:選擇項目
id | ... | items
-----+-----+-----------------
34 | ... | 823, 27, 1657
678 | ... | 957
2548 | ... | 92, 823
場orders.items
內容存儲爲逗號分隔id
的文本字段。 (我知道設計是錯誤的,應該有一個一對多的表來鏈接訂單與物品,但我沒有設計它)。
我需要選擇基於項目的訂單所包含:
SELECT id, items FROM orders
WHERE items LIKE IN (
SELECT CONCAT('%',id,'%') FROM items
WHERE wishlist = 0
,但顯然這是行不通的,因爲我不能從IN
獲得項目的列表使用LIKE
。 但是,這是我所需要的,因爲我需要使用%
通配符來查找它們。
我該如何做到這一點?
EDIT:
在這種SQL Fiddle有我的代碼返回7行和缺少其中2,其中FIND_IN_LIST
函數對結果完全相同的效果的例子。
'order'是MySQL中的一個保留字,因此,正如所寫,此查詢在任何情況下都不起作用。但從根本上說,你的問題是正常化(或缺乏)的問題。 FIND_IN_SET會做你想做的,但它是一個很好的替代正常規範化的數據庫。 – Strawberry
我只是爲了說明的目的而選擇了「訂單」這個名字 - 你是對的,我做了錯誤的選擇。但是,這不是我在我的項目中使用的名稱。 – Jago
你的字符串中總是有3個項目嗎? – Mihai