对不起,伙计们。我是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合并到一条记录中?
感谢您的帮助!
答案 0 :(得分:1)
您可以使用GROUP_CONCAT功能将图像分组为post表格的一列中的逗号分隔列表。
答案 1 :(得分:0)
如果我理解正确,你想拥有table_a中的所有字段,以及table_b中只有一个(可能是组合的)字段。
首先,如果你有多张图片,你必须决定你想要得到什么:
MIN(table_b.IMAGE)
或MAX(table_b.IMAGE)
以下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 ...