2012-01-24 31 views
0

我有一個顯示錶,其中有25萬條記錄。 顯示錶中的列是id,showid,artist_id,cityid,創建。爲多列優化mysql子查詢

如果相同的節目正在發生爲期4天。然後系統數據如下:

id,showid,artist_id,cityid,爲每個節目創建,showid將保持不變。

1 245 1 3 2011-12-30 15時零零分00秒

2 245 1 3 2011-12-30 13點00分00秒

3 245 1 3 19 2011-12-30 :00:00

SELECT UT.user_id,UT.type_id, UT.type ,UT.track_time, 
(SELECT showid FROM shows WHERE FIND_IN_SET(UT.type_id,artist_id) ORDER BY created DESC LIMIT 1) as mainshowid, 
(SELECT cityid FROM shows WHERE FIND_IN_SET(UT.type_id,artist_id) ORDER BY created DESC LIMIT 1) as maincityid 
FROM user_details as UT WHERE UT.type='artist' ORDER BY UT.track_time desc limit 20; 

查詢是給出慾望輸出但我怎麼能得到多個列在單個SUB查詢或任何其他方式。

回答

0

您可以:

SELECT 
    UT.user_id, 
    UT.type_id, 
    UT.type, 
    UT.track_time, 
    s.showid AS mainshowid, 
    s.cityid AS maincityid 
FROM 
     user_details AS UT 
    JOIN 
     shows AS s 
    ON s.showid = 
     (SELECT showid 
     FROM shows 
     WHERE FIND_IN_SET(UT.type_id, artist_id) 
     ORDER BY created DESC 
     LIMIT 1 
     ) 
WHERE UT.type='artist' 
ORDER BY UT.track_time DESC 
LIMIT 20 ; 
+0

由於它的工作原理。但我們可以優化它嗎? SELECT showid FROM shows WHERE FIND_IN_SET(UT.type_id,artist_id) ORDER BY created DESC LIMIT 1在shows表中我有1500萬行。因爲如果我在刪除LIMIT 20之後運行它,它需要很長時間 –

+0

使用FIND_IN_SET()表明您有逗號分隔的列。這是不好的。在這裏閱讀原因:[是否在數據庫列中存儲逗號分隔列表真的很糟糕?](http://stackoverflow.com/questions/3653462/is-storing-a-comma-separated-list-in-a-database -column - 真的 - 那壞)。 –

+0

如果你想要表現,那麼你應該規範表格。 –