【问题标题】:MYSQL group by on splitted arrayMYSQL 在拆分数组上分组
【发布时间】:2015-03-31 09:38:47
【问题描述】:

我有一个表 event,其中有一列 organizer。列组织者是一个 ID-Ints 数组(例如:“10,920,527”)。在第二个表 (user) 中,id 与名称相关联。

我需要一个 MYSQL 查询,它可以给我一串活动组织者的姓名。 所以f.e.:

SELECT event.*, group_concat(user.forname, ' ', user.surname) as real_names
FROM   event 
LEFT   JOIN user ON event.organizer=user.id 
WHERE  event.id='" . $get_id . "' 
GROUP  BY event.id

所以现在的问题是:event.organizer 是一个数组,我想将数组的每个值与所有user.id 的值进行比较。

我不确定这在 MYSQL 中是否可能,但我认为如果可能的话,它会比在 PHP 中内爆它们要短得多,因为我需要另一个查询来获取所有用户名。

【问题讨论】:

    标签: php mysql arrays compare left-join


    【解决方案1】:

    要正确解决此问题,您需要适当地重新设计数据库。

    如果每个用户都可以成为不同活动的组织者,并且每个活动可以由不同的用户组织(多对多关系),则需要创建另一个(数据透视)表,例如user_event:user_id, event_id。因此,要进行查询,您需要通过 event_id 加入此表,然后通过 user_id 加入用户表。

    SELECT event.*, group_concat(user.forname, ' ', user.surname) as real_names
    FROM   event 
    LEFT  JOIN user_event ON event.id=user_event.event_id
    LEFT  JOIN user ON user_event.user_id=user.id
    WHERE  event.id='" . $get_id . "' 
    GROUP  BY event.id
    

    【讨论】:

      【解决方案2】:

      你需要使用mysql的FIND_IN_SET函数,看看下面的代码

      SELECT event.*, group_concat(user.forname, ' ', user.surname) as real_names
      FROM   event 
      LEFT   JOIN user ON FIND_IN_SET(event.organizer, user.id) > 0
      WHERE  event.id='" . $get_id . "' 
      GROUP  BY event.id
      

      希望这会对你有所帮助。

      【讨论】:

        猜你喜欢
        • 2016-12-30
        • 2018-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 2016-10-05
        相关资源
        最近更新 更多