php mySQL group concat和group by

时间:2015-10-19 08:45:20

标签: php mysql sql

我有两张桌子

table 1: 
 row  | car_id | car_model | 
  1      1          CAR 1      
  2      2          CAR 2      
  3      3          CAR 3  
  4      4          CAR 4

table 2:

 row  | car_id |  car_features |
  1      1          Features 1
  2      2          Features 2
  3      2          Features 3

我想要展示的内容:

 row  | car_id | car_model | car_features |
  1      1          CAR 1      Features 1
  2      2          CAR 2      Features 2,Features 3
  3      3          CAR 3      
  4      4          CAR 4      

如果我使用group concat with group by

将显示第1,2行,我想显示所有行...

     row  | car_id | car_model | car_features |
      1      1          CAR 1      Features 1
      2      2          CAR 2      Features 2,Features 3

请发给我sql语句..THANK !!

这是我的查询

$format = mysql_query("SELECT c.* , p.*, d.*,f.* ,GROUP_CONCAT(DISTINCT e.features_title SEPARATOR '<br>') AS 'car_features' FROM bsi_car_master c,bsi_car_type p, bsi_car_vendor d, bsi_selected_features f, bsi_car_features e WHERE c.car_type_id=p.id AND c.car_vendor_id=d.id AND c.car_id = f.car_id AND f.features_id = e.id GROUP BY c.car_id");

2 个答案:

答案 0 :(得分:1)

您应该按照评论中的建议使用左连接:

SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.car_id=table2.car_id;

看看一些MySQL教程。 w3schools.org对我帮助很大。

我想这应该适合你。

但是如上所述,请在你的问题上加倍努力。我很乐意提供帮助,StackOverflow不是免费的代码服务!

答案 1 :(得分:0)

使用外部联接,以便即使表2中没有匹配的记录也可以获取行。

更新:现在您已经显示了您的查询:

查看您的查询非常奇怪,因为一方面您似乎是初学者,另一方面您使用的是上个世纪教授的连接语法,并且很久以来就已经过时了。

所以你的查询最好看起来像这样:

SELECT 
  c.*, 
  p.*, 
  d.*,
  f.*,
  GROUP_CONCAT(DISTINCT e.features_title SEPARATOR '<br>') AS car_features 
FROM bsi_car_master c
INNER JOIN bsi_car_type p ON p.id = c.car_type_id
INNER JOIN bsi_car_vendor d ON d.id = c.car_vendor_id
LEFT JOIN bsi_selected_features f ON f.car_id = c.car_id
LEFT JOIN bsi_car_features e ON e.id = f.features_id
GROUP BY c.car_id

p和d是内连接的,即p和d必须匹配,否则不选择c记录。但是f是外连接的,所以你得到c(和p和d),即使f中没有f的记录(那么所有f列在该记录中都是null)。至于选择e,我们还必须外接这个,因为如果我们没有匹配,我们仍然希望记录c与p和d。

顺便说一下,我将'car_features'更改为car_features。单引号用于字符串文字。双引号用于名称,但这里不需要它们