2011-04-26 62 views
0
RIGHT JOIN (SELECT * FROM images ORDER BY image_id) AS `i` ON i.ad_id = a.id 

如何订购未使用临时表的连接表? :)Mysql:订单加入表

因为它比简单的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

加入后按image_id排序。

(你做对image_id的指数,不是吗?)

UPDATE:

你可以把里面ORDER BYGROUP_CONCAT

GROUP_CONCAT(image_id ORDER BY image_id) 

,然后你不需要子查询。

+0

:)不是一个解决方案。顺序应该用于不同的表格字段。 – Somebody 2011-04-26 15:22:01

+0

当然,它的主键和ad_id也有索引。 – Somebody 2011-04-26 15:25:01

+0

酷!我不知道!谢了哥们。 +1 :) – Somebody 2011-04-26 15:36:04

1

在这个例子中不清楚为什么你需要命令子查询,所以我想说的是摆脱子查询的排序frmo,只应用最外层查询的排序。

+0

因为group_concat(i.image_id):)里面有多行加入表 – Somebody 2011-04-26 15:22:33

+1

@Beck:那么也许你应该发布整个查询。 – FrustratedWithFormsDesigner 2011-04-26 15:25:38

+0

当然可惜,这是我的懒惰和坏习惯。一会儿。 – Somebody 2011-04-26 15:27:58