如何在mysql中比较逗号分隔值?

时间:2017-09-26 12:01:36

标签: mysql database mysqli

我有3张桌子。 用户(ID,姓名) 物品(身份证,姓名,价格)和 订单(ID,USER_ID,ITEM_ID)

这里我的item_id列有逗号分隔值,如[1,2,3]。我有以下查询,如果item_id具有单个值,则完美有效。

select users.name,items.price
from orders
join users
on user.id = orders.user_id
join items
on items.id =  orders.item_id
where orders.id = 1

任何人都可以建议我如果有逗号分隔值,我怎样才能得到与上述查询相同的结果?

2 个答案:

答案 0 :(得分:1)

尝试find_in_set功能:

select users.name,items.price
from orders
join users
on user.id = orders.user_id
join items
on find_in_set(items.id, orders.item_id)
where orders.id = 1

但是,以逗号分隔的商店id是一种糟糕的数据库设计,您最好添加一个表来存储ordersitems之间的关系。

举一个例子:

create table order_item (
    order_id varchar(20),
    item_id varchar(20)
);

然后查询:

select users.name,items.price
from orders
join users
on user.id = orders.user_id
join order_item oi on oi.order_id = orders.id
join items on oi.item_id = items.id
where orders.id = 1
group by orders.id

<强> 修改

如果包含[],您可以尝试:

select users.name,items.price
from orders
join users
on user.id = orders.user_id
join items
on find_in_set(items.id, replace(replace(orders.item_id, '[', ''), ']', ''))
where orders.id = 1

答案 1 :(得分:0)

您可以使用FIND_IN_SET(str,strlist)