我有两张表
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与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语句..谢谢!
这是我的查询
$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");
使用外部联接,以便即使在table2中不存在匹配记录时也可以获取行。
更新:现在您已经显示了查询:
看到您的查询非常奇怪,因为一方面您似乎是一个初学者,另一方面您使用的是上个世纪讲授的联接语法,并且这种联接语法已经过时了。
因此,您的查询最好如下所示:
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是外部联接的,因此即使f中没有针对该c的记录(那么该记录中的所有f列都为空),您也将得到c(以及p和d)。至于选择e,我们还必须对此进行外部联接,因为同样,如果没有匹配项,我们仍然希望记录c具有p和d。
我换'car_features'到car_features的方式。单引号用于字符串文字。双引号用于名称,但此处不需要
'car_features'
car_features