2

自己結合を使用して次の 2 つのクエリを 1 つに結合できるかどうか、またその方法を教えてください。

クエリ 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、親行の があります。テーブルまたは DB 構造を変更するオプションがありません。

現時点では、クエリ1からのすべての結果行に対して新しいクエリ(query2)を実行していますが、これは最適ではありません;-)

ありがとう!

4

3 に答える 3

1

テーブルを自己結合したい場合は、それぞれに異なるエイリアスを割り当てる必要があり、問題なく動作するはずです

   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

これがうまくいくことを願っています!

于 2009-12-01T12:31:30.083 に答える
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 からのものである場合、それ以外の場合は、値がumogから取得されるかどうかがあいまいになりますum2

于 2009-12-01T12:39:29.533 に答える
0

次のように、親テーブルの結合を実現するために、別のエイリアスを使用して ugc_meta テーブルに LEFT JOIN を使用するだけでよいはずです。

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

おそらく子テーブルに常にparent_content_idがあるとは限らないため、LEFT JOINを使用しました。この場合、常に親が存在する場合は、INNER JOINを使用してパフォーマンスをさらに向上させることができます。

于 2009-12-01T12:38:05.247 に答える