【问题标题】:MySQL Results a list separated by comma and values from different tableMySQL 结果由逗号分隔的列表和来自不同表的值
【发布时间】:2012-03-11 17:32:54
【问题描述】:

我有两个表,我想连接以逗号分隔的值并显示它们一个字段显示包含另一个表中的 id 的所有值。

例子:

这是table1

--------------------------------------
|   id  |   title   |   area         |
| -----------------------------------|
|   1   |   hi      |   1,12,14      |
| -----------------------------------|
|   2   |   by      |   12,14,2      |
| -----------------------------------|
|   3   |   me      |   14,2         |
--------------------------------------

这是table2

---------------------
|   id  |   name    |
|-------------------|
|   1   |   Wa      |
|-------------------|
|   12  |   La      |
|-------------------|
|   14  |   Sa      |
|-------------------|
|   2   |   Tn      |
---------------------

我想展示这个

------------------------------------
|   id  |   title   |   area       |
|----------------------------------|
|   1   |   hi      |   Wa,La,Sa   |
|----------------------------------|
|   2   |   by      |   La,Sa,Tn   |
|----------------------------------|
|   3   |   me      |   Sa,Tn      |
------------------------------------

只需将 table1 中的值替换为 table2 中的名称即可。

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    理想情况下,您应该创建一个名为 table1_has_table2 的新表

    CREATE TABLE table1_has_table2 (
        table1_id INT(11) UNSIGNED NOT NULL,
        table2_id INT(11) UNSIGNED NOT NULL,
        PRIMARY KEY (table1_id,table2_id)
    )
    

    这样就可以非常简单地执行您的 n:m 关系,即

    SELECT 
        table1.id,
        table1.title,
        GROUP_CONCAT(table2.name) AS area
    
    FROM table1
    
    INNER JOIN table1_has_table2
    ON table1_has_table2.table1_id = table1.id
    
    INNER JOIN table2
    ON table2.id = table1_has_table2.table2_id
    
    GROUP BY table1.id
    

    从长远来看,这种方法也更有效

    【讨论】:

    • 我应该这样创建表吗? CREATE TABLE table1_has_table2 (table1_id INT UNSIGNED PK, table2_id INT UNSIGNED PK) 因为它给了我 sql 语法错误。
    • 用正确的 SQL 代替速记更新
    • 它似乎工作,但我没有得到任何结果“MySQL 返回了一个空的结果集”。顺便说一句,table1_has_table2.table2.id 需要是 table1_has_table2.table2_id 吗?
    • 那里很好发现 Dar,你是对的。如果您已经实施了该建议并且它没有返回结果,请您添加一个更新的示例吗?这可能是实现中的一些东西
    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 2017-07-05
    • 2020-02-02
    • 2017-06-24
    • 1970-01-01
    • 2013-07-03
    • 2021-11-22
    相关资源
    最近更新 更多