从mysql中的2个表中分组数据

时间:2012-02-06 11:48:27

标签: php mysql

对不起,伙计们。我是mysql的新手,但我需要帮助从2个表中获取和合并数据。

table_a

ID | TITLE | CONTENT | DATE

table_b

ID | POST_ID | IMAGE

这是我的代码

$query = "SELECT table_a.*, table_b.IMAGE FROM table_a
LEFT JOIN table_b
      ON table_a.ID = table_b.POST_ID
      ORDER BY table_a.DATE";
$mysql_result = mysql_query($query);

$result = array();
while ($row = mysql_fetch_assoc($mysql_result)) {
   $result[] = $row;
}
print json_encode($result);

但是,对于那些获得超过1张图像的table_a中的记录,我的json包含具有不同图像的重复内容。

是否有任何方法将具有相同ID 的IMAGE合并到一条记录中?

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

您可以使用GROUP_CONCAT功能将图像分组为post表格的一列中的逗号分隔列表。

答案 1 :(得分:0)

如果我理解正确,你想拥有table_a中的所有字段,以及table_b中只有一个(可能是组合的)字段。

首先,如果你有多张图片,你必须决定你想要得到什么:

  • 只有1张图片?使用MIN(table_b.IMAGE)MAX(table_b.IMAGE) 以下SQL
  • 所有图像由例如逗号?在以下SQL
  • 中使用GROUP_CONCAT(table_b.IMAGE SEPARATOR ',')或类似内容

接下来您必须明白,为了每table_a.ID只获得一行,您必须按table_a.ID进行分组,因此我们有

SELECT
  table_a.*,
  <function from above> AS image
FROM  table_a
LEFT JOIN table_b
      ON table_a.ID = table_b.POST_ID
GROUP BY table_a.ID
ORDER BY table_a.DATE

答案 2 :(得分:0)

我相信你需要的是这样的东西:

SELECT table_a.*, GROUP_CONCAT(table_b.IMAGE) FROM table_a
LEFT JOIN table_b ON table_a.ID = table_b.POST_ID
GROUP BY table_a.*
ORDER BY table_a.DATE

(不确定是否必须拼出GROUP BY子句,单独列出字段名称,或者此处是否接受.*符号。)

答案 3 :(得分:-1)

您可以使用 JOIN 代替 LEFT JOIN 。这样它只会加载一行

或其他方式

在ORDER BY之前放置GROUP BY a.ID jsut ...