【问题标题】:MySQL - Join on comma-separated fieldMySQL - 加入逗号分隔的字段
【发布时间】:2015-05-05 12:37:02
【问题描述】:

我想做一些新的东西(对我来说这是新的,公元前。我只是一个 MySQL 初学者)但我没有找到解决方案。

我的数据库中有这些条目:

mytable_items
id | title | catids
1 | test | 32,14

mytable_categories
id | title
32 | Test-Category
14 | Another-Category

现在我想加入这个东西:显示来自 mytable_items 的所有数据 - 还显示分配的类别(它们的标题)

结果应该是:

1 | test | Test-Category, Another-Category

我该如何解决这个问题?

提前非常感谢 :-)

【问题讨论】:

  • 建议将catids拆分成一个链接表,如果它们在一个字段中,您将不得不递归子串和链接.. [不容易或推荐]

标签: mysql join left-join inner-join


【解决方案1】:

试试这个:

SELECT  m.id,group_concat(mc.title)
FROM    mytable_items m
JOIN    mytable_categories mc
ON      FIND_IN_SET(mc.id,m.catids)
group by
    m.id

SQL FIDDLE DEMO

【讨论】:

  • 我不确定 SO 是否应该鼓励这种解决方案——尤其不适合初学者!
  • 工作 :-) 非常感谢
  • @MyFault:- 不客气。还要通知您,不建议将值作为逗号分隔的特殊 ID 存储在您的表中。以后会给你制造麻烦。尝试按照建议学习规范化
【解决方案2】:

您应该为每个 CatID 使用不同的实体。然后你可以加入两个表并使用Group Concat

【讨论】:

    【解决方案3】:

    试试这个:

    Select * 
    from mytable_items a
    join mytable_categories b on a.id = b.id
    

    这将加入数据并正确显示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 2020-07-01
      相关资源
      最近更新 更多