2009-12-01 60 views
2

任何人都可以告訴我是否可以將以下兩個查詢合併爲一個使用自連接的查詢,如果是,如何執行?MySQL加入問題

查詢1:

SELECT pm.username AS user, 
      uc.content_id AS id, 
      value AS filename, 
      name, 
      moderation_status AS status, 
      uc.parent_content_id 
    FROM myweb.ugc_meta um 
LEFT JOIN myweb.ugc_content uc ON uc.content_id = um.item_id 
LEFT JOIN myweb.userbase_member pm ON uc.user_id = pm.id 
    WHERE uc.content_type ='my.photo' 
     AND uc.promoted = '1' 
     AND moderation_status='passed' 
    LIMIT 10 

查詢2:

SELECT value 
    FROM myweb.ugc_meta um 
WHERE um.item_id = '4780c650137a3409901286' 
-- (item_id is the content_parent_id from query 1) 

ugc_meta包含在ugc_content照片的相冊名稱。 ugc_content包含專輯和照片的行。 rows代表照片有一個parent_content_id這是父行的content_id。我沒有選擇更改表格或數據庫結構。

目前我從查詢1這是次優;-)

運行感謝每一個結果行一個新的查詢(QUERY2)!

回答

0

你應該能夠簡單地使用LEFT JOIN的ugc_meta表,以便使用不同的別名來實現你的父表的連接,像這樣:

SELECT pm.username AS user, 
      uc.content_id AS id, 
      value AS filename, 
      name, 
      moderation_status AS status, 
      uc.parent_content_id, 
      parent.`value` 
    FROM myweb.ugc_meta um 
LEFT JOIN myweb.ugc_content uc ON uc.content_id = um.item_id 
LEFT JOIN myweb.ugc_meta parent ON uc.parent_content_id = parent.item_id 
LEFT JOIN myweb.userbase_member pm ON uc.user_id = pm.id 
    WHERE uc.content_type ='my.photo' 
     AND uc.promoted = '1' 
     AND moderation_status='passed' 
    LIMIT 10 

我使用LEFT JOIN因爲那時可能沒有永遠是子表中的parent_content_id,如果在這種情況下總是有父項,那麼你可以使用INNER JOIN,這會提高你的性能收益。

1

,如果你想自加入你分配一個不同的aliase爲每一個表,那麼它應該沒有問題

SELECT pm.username AS user, 
      uc.content_id AS id, 
      um.value AS filename, um2.value AS filename2 
      um.name, um2.name AS name2 
      moderation_status AS status, 
      uc.parent_content_id 
    FROM myweb.ugc_meta um 
LEFT JOIN myweb.ugc_content uc 
     ON uc.content_id = um.item_id 
LEFT JOIN myweb.userbase_member pm 
     ON uc.user_id = pm.id 
LEFT JOIN myweb.ugc_meta um2 
     ON id = um2.item_id 
    WHERE uc.content_type ='my.photo' 
     AND uc.promoted = '1' 
     AND moderation_status='passed' 
    LIMIT 10 

希望這個作品!

+0

謝謝 - 我得到它排序。 – codecowboy

1

這應做到:

SELECT pm.username AS user, 
     uc.content_id AS id, 
     value AS filename, 
     name, 
     moderation_status AS status, 
     um2.value AS 
FROM myweb.ugc_meta um 
LEFT JOIN myweb.ugc_content uc ON uc.content_id = um.item_id 
LEFT JOIN myweb.userbase_member pm ON uc.user_id = pm.id 
LEFT JOIN myweb.ugc_meta om2 ON um2.item_id = uc.parent_content_id 
WHERE uc.content_type ='my.photo' 
    AND uc.promoted = '1' 
    AND moderation_status='passed' 
LIMIT 10 

你可能要忍受 「嗯。」在value,namemoderation_status的前面,如果它們來自ugc_meta,否則該值將取自umum2