2011-04-26 55 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