【问题标题】:Join two table mysql query return all user list values?连接两个表mysql查询返回所有用户列表值?
【发布时间】:2016-05-04 06:51:57
【问题描述】:

连接两个表 MySQL 查询返回所有用户列表值。 请更正此查询或提供一些查询。

表 1:用户

+---------+------------+-----------+
| user_id | user_name  | cource_id |
+---------+------------+-----------+
|       1 | ramalingam | 1,2,3,4   |
|       2 | yuvi       | 1         |
|       3 | Saravanan  | 1,2,3     |
|       4 | gandhi     | 1         |
+---------+------------+-----------+

表2:课程

+-----------+-------------+
| cource_id | cource_name |
+-----------+-------------+
|         1 | php         |
|         2 | wordpress   |
|         3 | seo         |
|         4 | magento     |
+-----------+-------------+

输出

--------------------------------------
user_id | user_name | cource_id
--------------------------------------
1       | ramalingam| php,wordpress,seo,magnto
2       | yuvi      | php
3       | Saravanan | php,wordpress,seo
4       | gandhi    | php

这是我的查询

SELECT u.user_id,u.user_name, GROUP_CONCAT(c.cource_name)as course_name
FROM users as u 
LEFT JOIN course as c ON c.cource_id = u.user_id

感谢您在这方面提供的任何帮助...

【问题讨论】:

  • 那是一个糟糕的数据库设计,你不应该存储逗号分隔的数据。您需要对其进行规范化。这是我在相同情况下的答案之一,以及如何进行标准化并获得所需的结果stackoverflow.com/questions/30071597/…
  • 这里还有一个和你类似的stackoverflow.com/questions/29891522/…
  • department 表在哪里,它的用途是什么?这个表应该是查询的一部分吗?

标签: mysql


【解决方案1】:

一般而言,数据库设计很糟糕,根本不要使用逗号分隔的列表。但是,您应该在 JOIN 子句中使用 FIND_IN_SET() 以实现此目的:

SELECT
    u.user_id,
    u.user_name,
    GROUP_CONCAT(c.cource_name) AS course_name
FROM
    users AS u
LEFT JOIN cource AS c ON FIND_IN_SET(c.cource_id, u.cource_id)
GROUP BY
    u.user_id,
    u.user_name

输出是:

+---------+------------+---------------------------+
| user_id | user_name  | course_name               |
+---------+------------+---------------------------+
|       1 | ramalingam | php,wordpress,seo,magento |
|       2 | yuvi       | php                       |
|       3 | Saravanan  | php,wordpress,seo         |
|       4 | gandhi     | php                       |
+---------+------------+---------------------------+
4 rows in set

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    相关资源
    最近更新 更多