MySQL对多个JOINS使用GROUP_CONCAT

azsl1326

我有以下四个表。我的查询工作正常,但我需要使字段“ AUTHORIZED_VIEWER”和“ AUTHORIZED_VIEWER_EMAIL”返回所有值,而不仅仅是第一个。我相信这可以通过使用GROUP_CONCAT来完成,但是,我不确定该如何实现。注–尝试使用GROUP_CONCAT时,由于返回BLOB,因此必须使用以下语法:

CONVERT(GROUP_CONCAT(authorized_viewer) USING utf8)

这是四个表:

users_tbl
+-----+------------------+
|id   |email             |  
+-----+------------------+
|10   | [email protected]     |
|8    | [email protected]     |
|11   | [email protected]     |
|12   | [email protected]      |
+-----+------------------+

authorized_viewers_tbl (authorized_viewer linked to id in users_tbl)
+-----+------------+------------------+
|id   |lightbox_id |authorized_viewer |   
+-----+------------+------------------+
|1    | 50         |11                |
|7    | 50         |8                 |
|3    | 31         |11                |
|5    | 30         |8                 |
|6    | 30         |11                |
|8    | 16         |11                |
|9    | 16         |10                |
|10   | 5          |10                |
|11   | 5          |11                |
+-----+------------+------------------+

lightboxes_tbl
+-----+------------------+---------------+
|id   |lightbox_name     |author         |   
+-----+------------------+---------------+
|5    | Test Lightbox #1 |[email protected]    |
|16   | Test Lightbox #2 |[email protected]   |
|30   | Test Lightbox #3 |[email protected]   |
|31   | Test Lightbox #4 |[email protected]   |
|50   | Test Lightbox #5 |[email protected]   |
+-----+------------------+---------------+

lightbox_assets_tbl
+-------+-------------+------------------+------------------=---+----------+
|id     |lightbox_id  |asset_name        |asset_path            | asset_id |
+-------+-------------+------------------+----------------------+----------+
|232    |30           |b757.jpg          |SWFs/b757.jpg         | 3810     |
|230    |31           |b757.jpg          |SWFs/b757.jpg         | 3810     |
|233    |16           |a321_takeoff.jpg  |SWFs/a321_takeoff.jpg | 3809     |
|234    |31           |a321_takeoff.jpg  |SWFs/a321_takeoff.jpg | 3809     |
|235    |50           |a330_landing.png  |SWFs/a330_landing.png | 3789     |
+-------+-------------+------------------+-----------------------+---------+

这是我当前正在使用的查询:

SELECT lb.id,
   lb.lightbox_name,
   lb.author,
   avt.authorized_viewer,
   u.email AS authorized_viewer_email,
   COUNT(lba.lightbox_id) total_assets
FROM lightboxes_tbl lb
LEFT JOIN lightbox_assets_tbl lba ON lb.id = lba.lightbox_id
LEFT JOIN authorized_viewers_tbl avt ON avt.lightbox_id = lb.id
LEFT JOIN users_tbl u ON u.id = avt.authorized_viewer
WHERE lb.author = '[email protected]'
  OR avt.authorized_viewer =
    (SELECT id
     FROM users_tbl
     WHERE email = '[email protected]')
GROUP BY lb.id
ORDER BY lb.lightbox_name ASC

SQL小提琴

谢谢!

[编辑]基于SQL Fiddle的预期结果:

 +-------+----------------+--------------+-------------------+--------------------------+--------------+
 |id     |lightbox_name   |author        |authorized_viewer  | email                    | total_assets |
 +-------+----------------+--------------+-------------------+--------------------------+--------------+
 |5      |Test Lightbox#1 |[email protected]   |10,11              |[email protected],[email protected] |0             |             
 |16     |Test Lightbox#2 |[email protected]  |10,11              |[email protected],[email protected] |1             |
 |30     |Test Lightbox#3 |[email protected]  |11,8               |[email protected],[email protected] |1             |
 +-------+-------------+-----------------+-------------------+--------------------------+--------------+
xQbert

有一种更干净的方法可以执行此操作,但是我还没有时间考虑它。

有趣的问题还是感谢您的分享,并希望我们有所帮助!

  1. 我们添加group_concatavt.authorized_vieweru.email
  2. 我们添加distinctgroup_concat,仅根据要求拉回唯一值。
  3. 我们group by为每个非汇总值添加了。
  4. 我们更改了where子句,以拉入所有Scott曾担任审阅者的灯箱。通过使用作者字段作为限制,我们排除了其他审阅者。通过将过滤条件基于灯箱ID,我们可以保留所有用户;可以group_concat根据需要工作。

SELECT lb.id,
       lb.lightbox_name,
       lb.author,
       group_concat(distinct avt.authorized_viewer) a,
       group_concat(distinct u.email) b,
       COUNT(distinct lba.id) total_assets
FROM lightboxes_tbl lb
LEFT JOIN lightbox_assets_tbl lba ON lb.id = lba.lightbox_id
LEFT JOIN authorized_viewers_tbl avt ON avt.lightbox_id = lb.id
LEFT JOIN users_tbl u ON u.id = avt.authorized_viewer
where lb.author = '[email protected]'
or 
lb.id in (Select lightbox_ID 
          from authorized_Viewers_tbl X
          INNER JOIN users_Tbl U on U.ID = X.authorized_Viewer
          WHERE email = '[email protected]')
GROUP BY lb.id, lb.lightbox_name, lb.author
ORDER BY lb.lightbox_name ASC

http://sqlfiddle.com/#!2/ccc6a/2/0希望以上内容对您有所帮助!(从基本主题中清除了一些评论,因为我现在已将其包括在内或此处获得的信息。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL多个group_concat命令保存

来自分类Dev

如何在group_concat中使用sum和joins

来自分类Dev

如何在group_concat中使用sum和joins

来自分类Dev

使用group_concat更新mysql表

来自分类Dev

从group_concat使用

来自分类Dev

使用group_concat?

来自分类Dev

从group_concat使用

来自分类Dev

MySQL-优化-使用具有多个的group_concat和联接

来自分类Dev

MySQL使用group_concat将多个关系表选择为一行

来自分类Dev

MySQL:在group_concat中使用concat时如何排序?

来自分类Dev

MySQL:在group_concat中使用concat时如何排序?

来自分类Dev

在MySQL中具有多个联接的group_concat

来自分类Dev

MySQL group_concat与联接

来自分类Dev

MySQL:嵌套的GROUP_CONCAT

来自分类Dev

MySQL group_concat问题

来自分类Dev

MySQL Group_Concat 不在

来自分类Dev

使用join和group_concat的mysql请求

来自分类Dev

结合使用MYSQL GROUP_CONCAT和子查询

来自分类Dev

Mysql在使用GROUP_CONCAT的联接中重复的值

来自分类Dev

使用Bootstrap显示Mysql Group_Concat结果

来自分类Dev

使用IN与group_concat结果进行MySQL查询

来自分类Dev

插入数据时,MySQL使用GROUP_CONCAT

来自分类Dev

使用GROUP_CONCAT和IN子句的mysql存储过程构造

来自分类Dev

结合使用MYSQL GROUP_CONCAT和子查询

来自分类Dev

使用join和group_concat的mysql请求

来自分类Dev

Mysql在使用GROUP_CONCAT的联接中重复的值

来自分类Dev

在mysql中使用GROUP_CONCAT选择查询

来自分类Dev

MySQL - 是否可以在 IN() 语句中使用 group_concat?

来自分类Dev

在 JOIN 查询中使用 Mysql GROUP_CONCAT