我有两个表,只有一个公共字段。 以下是这两个表结构
的方法表1
+--ID--+--Title----+----others---+
| 123 | Title 1 | other values|
| 124 | Title 2 | other values|
| 125 | Title 3 | other values|
| 126 | Title 4 | other values|
+------+-----------+-------------+
表2
+--ID--+--Tag ID--+----others---+
| 123 | 11 | other values|
| 123 | 12 | other values|
| 123 | 13 | other values|
| 123 | 14 | other values|
| 124 | 15 | other values|
| 124 | 16 | other values|
| 125 | 17 | other values|
| 126 | 18 | other values|
+------+----------+-------------+
我想证明条款ID 123
有4 tags
,即11,12,13& 14如下表
+--Article ID--+--Article Title--+--Tags--+--Tag IDs------+
| 123 | Title 1 | 4 | 11, 12, 13, 14|
| 124 | Title 2 | 2 | 15, 16 |
| 125 | Title 3 | 1 | 17 |
| 126 | Title 4 | 1 | 18 |
+--------------+-----------------+--------+---------------+
我是PHP和MySQL的新手,并试图学习它。
有人请帮助我知道如何获得理想的结果。
答案 0 :(得分:2)
此查询应该有效(通过一些调整)。
SELECT `ID` AS `t1`.`Article ID`, `t2`.`Title` AS `Article Title`, COUNT(`t2`.`ID`) AS `Tags`,
GROUP_CONCAT(`t2`.`ID`) AS `Tag IDs` FROM `Articles` AS `t1`
LEFT JOIN `Tags` AS `t2` ON `t1`.`ID` = `t2`.`ID`
GROUP BY `t1`.`ID`
GROUP_CONCAT
函数还有其他几个选项,但默认设置应该可以正常运行。
答案 1 :(得分:1)
SELECT t1.id AS 'Article ID',
t1.title AS 'Article Title',
count( t2.tag_id ) AS 'Tags',
GROUP_CONCAT( t2.Tag_Id order by t2.Tag_id ASC) AS `Tag IDs`
FROM table1 t1
JOIN table2 t2 ON ( t1.id = t2.id )
GROUP BY t1.id;
希望这有效!
答案 2 :(得分:0)
使用JOIN
(LEFT,RIGHT INNER)关键字合并表格。例如:
SELECT T1.*, T2.*, COUNT(T2.ID) AS TAG_COUNT, GROUP_CONCAT(T2.ID) AS TAG_IDS
FROM TABLE1 T1
LEFT OUTER JOIN TABLE2 T2
ON T1.TAG_ID = T2.ID
这种类型的连接结构表明,您有一个共同的字段,通过该字段进行连接。 在我的表结构中我假设,第一个表T1是Article的表,第二个表是Tags表。在这种情况下,您需要在T1表中有一个字段,该字段对应于T2中的字段,这很可能是ID。
编辑:作为最后一步,您需要连接结果以实现所需的结构,正如许多答案所述 - 使用GROUP_CONCAT()
函数。
答案 3 :(得分:0)
正如有人在评论中提到的那样,你应该使用GROUP_CONCAT()。以下是一些示例和选项 - http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
答案 4 :(得分:0)
SELECT table1.*,
table2.tagidgroup
FROM table1
INNER JOIN (SELECT id,
Group_concat(tagid SEPARATOR ',' ) AS tagidgroup
FROM table2
GROUP BY id) Table2
ON table1.id = Table2.id