我有一个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