如何匹配Mysql中具有逗号分隔值的两个不同列

时间:2016-10-16 18:51:09

标签: php mysql laravel-4

我有两张桌子:

  1. CampaignTable
  2. 具有以下属性

    id , campaign ,user_group
    

    例子是

    1  8867116213  5,11,15,16,18,20
    2  8867116214  0,8,22
    

    然后我有另一个名为User Table的表

    具有以下属性

    id emp_id  user_group
    

    示例就像这样

    1  274  0,5,8,9,10,11,21,20
    2  275  5,11,20
    3  279  19,21,22,25
    

    我必须加入此表并创建一个具有广告系列明智用户的数组

    例如,对于ID为1的广告系列,它应该给我

    274,275

    如何在Mysql中实现这一目标

    由于

1 个答案:

答案 0 :(得分:3)

您应该定义规范化数据。例如,考虑这种规范化,几乎不会改变您的数据库结构:

INSERT INTO CampaignTable
    (`campaign`, `user_group`)
VALUES
    (8867116213, 5),
    (8867116213, 11),
    (8867116213, 15),
    (8867116213, 16),
    (8867116213, 18),
    (8867116213, 20),
    (8867116214, 0),
    (8867116214, 8),
    (8867116214, 22)
;

INSERT INTO UserTable
    (`emp_id`, `user_group`)
VALUES
    (274, 0),
    (274, 5),
    (274, 8),
    (274, 9),
    (274, 10),
    (274, 11),
    (274, 21),
    (274, 20),
    (275, 5),
    (275, 11),
    (275, 20),
    (279, 19),
    (279, 21),
    (279, 22),
    (279, 25)
;

然后,您可以使用简单的查询来获取数据:

SELECT c.campaign, GROUP_CONCAT(DISTINCT u.emp_id) FROM CampaignTable c 
JOIN UserTable u ON c.user_group = u.user_group
GROUP BY c.campaign

请参阅SQLFiddle