加入查询和分组以显示结果

时间:2011-05-25 00:25:35

标签: mysql sql

我有以下查询返回9000条记录:

SELECT Table1.id
, Table1.value 
, Table2.client_id 
, Table1.id_key
, Table3.id
, Table3.title
FROM Table1
LEFT JOIN Table2 ON Table2.id = Table1.Table2_id
LEFT JOIN Table3 ON Table1.id_key = Table3.id
WHERE Table2.orderType = "Grace"
AND Table2.id IN (7364)

由此我需要创建一个标题为Table1.value的报告,然后它将显示所有Table3.id,Table3.title

我试过了:

SELECT Table1.id  
    , Table1.value 
    , Table2.client_id 
    , Table1.id_key 
    , Table3.id 
    , Table3.title
    FROM 
    Table1
    LEFT JOIN Table2 ON Table2.id = Table1.Table2_id
    LEFT JOIN Table3 ON Table1.id_key = Table3.id
    WHERE Table2.orderType = "Grace"
    AND Table2.id IN (7364)
    GROUP BY Table1.value

但是这会把结果减少到74,这是可以的,但我不能在这些标题下看到任何其他内容......我该怎么做。

2 个答案:

答案 0 :(得分:2)

很抱歉把它放在答案中,但截至目前为止我没有足够的代表发表评论。

我理解的是你试图获得与表1中的行相关的表3(几行)的值。如何:

你没有分组的第一个查询并按table1.value ASC添加顺序,[此处是另一个顺序],然后在你的代码中只显示标题,如果它是新的,就像这样

   $old_header=""; //outside 
   while ($row=mysql_fetch_assoc($query)){
     if ($old_header!=$row['value']){  //table1.value 
         $old_header=$row['value'];
         echo "<h1>Category: ".$old_header."</h1>";
     } ...

group by将合并具有相同table1.value的所有查询,这不是您想要的。

答案 1 :(得分:1)

通常这是在代码中完成的(而不是在sql中),但GROUP_CONCAT可能会起作用。看看MySQL Results as comma separated list