Mysql:订单加入表

时间:2011-04-26 15:18:25

标签: mysql

RIGHT JOIN (SELECT * FROM images ORDER BY image_id) AS `i` ON i.ad_id = a.id

如何在不使用临时表的情况下订购连接表? :)

因为它比简单连接慢5倍:

RIGHT JOIN images AS `i` ON i.ad_id = a.id

字段列表存在问题,应该在子查询中重复,以避免使用*符号。

谢谢;)

更新

SELECT a.id, GROUP_CONCAT(image_id) AS `image_ids`
FROM `ads` AS `a`
RIGHT JOIN (SELECT * FROM images ORDER BY image_id) AS `i` ON i.ad_id = a.id
GROUP BY `a`.`id`
ORDER BY `a`.`id` DESC

连接表中的每个id都有多个匹配的行。这就是我需要订购的原因。

group_concat(image_id)

2 个答案:

答案 0 :(得分:2)

在加入后按image_id排序。

(你在image_id上​​有一个索引,不是吗?)

<强>更新

您可以将ORDER BY放入GROUP_CONCAT

GROUP_CONCAT(image_id ORDER BY image_id)

然后你不需要子查询。

答案 1 :(得分:1)

在这个例子中不清楚为什么你需要订购子查询,所以我要说只是去除子查询的排序,只对最外层的查询应用排序。