2012-02-06 36 views
0

对不起,伙计们。我在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); 

然而,对于那些表-A其中记录了超过1个IMAGE,我的JSON包含重复用不同的图片内容。

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

感谢您的帮助!

+0

你是什么意思“合并具有相同ID的图像到单个记录”?我怀疑你有多个不同ID的图像,但相同的POST_ID - 因此你得到多个记录。你想要达到什么样的行为?如果您在同一篇文章中有多张图片,您需要获得哪些结果? – 2012-02-06 11:53:18

+0

感谢您的回复Aleks。我需要的结果就像 [{“ID”:“1”,“TITLE”:“Hello World”,“DATE”:“2011-08-10”,“CONTENT”:“我是新手。”, “图像”: “A.JPG,B.JPG,C.JPG”},{ “ID”: “2” ...}。所以我可以通过在jQuery中解析显示缩略图和标题/内容。 – louis 2012-02-06 12:02:06

回答

0

如果我理解正确,你希望从table_b中有所有的字段,并且只有一个(可能是组合的)字段。

首先,你必须决定你想要得到什么,如果你有一个以上的图像更多:

  • 只有1个图像?使用MIN(table_b.IMAGE)MAX(table_b.IMAGE)在 之后SQL
  • 所有图像由一个逗号?使用GROUP_CONCAT(table_b.IMAGE SEPARATOR ',')或类似下面的SQL

接下来你要明白,让每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 
+0

感谢您的回复。顺便说一句我现在得到这个错误:警告:mysql_fetch_assoc()期望参数1是资源,布尔在...中给出52 line34 – louis 2012-02-06 12:09:37

+0

你有什么选择?Pleast post complete SQL – 2012-02-06 12:11:17

+0

请注意,我的回答中存在拼写错误:有“SEAPRATOR”(错误),我现在已更正为“SEPARATOR” – 2012-02-06 12:12:47

-1

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

或其他方式

GROUP BY a.ID仅仅指刚ORDER BY之前...

1

可以使用GROUP_CONCAT功能组中的图像作为一个逗号分隔的列表在你的帖子表的一列中。

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条款,单独列出字段名,还是.*符号将被接受在这里。)

相关问题