php mySQL group concat 和 group by
php mySQL group concat and group by
我有两个table
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
。单引号用于字符串文字。双引号是名字,这里不需要
您应该按照评论中的建议使用左连接:
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.car_id=table2.car_id;
看看一些 MySQL 教程。 w3schools.org对我帮助很大
我想这应该对你有用。
但是如前所述,请在您的问题上多下功夫。我很乐意提供帮助,Whosebug 不是免费的代码服务!
我有两个table
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
。单引号用于字符串文字。双引号是名字,这里不需要
您应该按照评论中的建议使用左连接:
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.car_id=table2.car_id;
看看一些 MySQL 教程。 w3schools.org对我帮助很大
我想这应该对你有用。
但是如前所述,请在您的问题上多下功夫。我很乐意提供帮助,Whosebug 不是免费的代码服务!