【问题标题】:How to compare comma separated values in mysql?如何比较mysql中的逗号分隔值?
【发布时间】:2018-03-07 15:34:15
【问题描述】:

我有 3 张桌子。 用户(ID,姓名) 项目(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

当有逗号分隔值时,谁能建议我如何获得与上述查询相同的结果?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以使用FIND_IN_SET(str,strlist)

    【讨论】:

      【解决方案2】:

      试试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是一种糟糕的db设计,你最好添加一个表来存储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
      

      【讨论】:

      • 请提出更好的设计。我正在存储整个 id 数组。
      • 感谢您提出更好的设计建议。我尝试使用 find_in_set 进行查询,但没有得到任何结果。我稍后会实施你的建议,但现在我想从我现在拥有的结果中得到结果。
      • 我的 db 字段的值为“[1,2,3]”,注意它有两个方括号。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多