我有一个 orders
表,其中包含与每个订单相关的许多 items
:
id | ... | items
-----+-----+-----------------
34 | ... | 823, 27, 1657
678 | ... | 957
2548 | ... | 92, 823
Field orders.items
将内容存储为逗号分隔的 id
文本字段。 (我知道设计是错误的,应该有一个一对多的表来链接订单和项目,但我没有设计它)。
我需要根据订单包含的商品选择订单:
SELECT id, items FROM orders
WHERE items LIKE IN (
SELECT CONCAT('%',id,'%') FROM items
WHERE wishlist = 0
但显然它不起作用,因为我不能在从 IN
获得的项目列表中使用 LIKE
。
然而,这正是我所需要的,因为我需要使用 %
通配符来找到它们。
我怎样才能做到这一点?
编辑:
在这个 SQL Fiddle 有一个我的代码示例返回 7 行并丢失其中的 2 行,其中 FIND_IN_LIST
函数对结果具有完全相同的效果。 p>
最佳答案
试试这个:
SELECT DISTINCT o.id, o.items
FROM orders AS o
INNER JOIN items AS i ON FIND_IN_SET(i.id, REPLACE(o.items, ' ', ''))
WHERE i.wishlist = 0 AND i.cost = 44800;
检查这个SQL FIDDLE DEMO
输出
| ID | ITEMS |
|-----|------------|
| 154 | 375, 374 |
| 155 | 377 |
| 159 | 384 |
| 172 | 435 |
| 174 | 440 |
| 228 | 770, 769 |
| 229 | 775,841 |
| 230 | 777 |
| 528 | 1518, 1517 |
关于mysql - 使用通配符从列表中选择项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21231657/