私はSQLクエリーを作成するためにCREATE VIEWとエイリアシングに頼ってきましたが、もっと効率的な方法があると確信しています。誰でも一般的なアドバイスを提供できますか?ここに私の最新の醜態です:CREATE VIEWに基づいて長いSQLクエリを減らすには?
SELECT associations2.object_id, associations2.term_id, associations2.cat_ID, associations2.term_taxonomy_id
FROM (SELECT objects_tags.object_id, objects_tags.term_id, wp_cb_tags2cats.cat_ID, categories.term_taxonomy_id
FROM (SELECT wp_term_relationships.object_id, wp_term_taxonomy.term_id, wp_term_taxonomy.term_taxonomy_id
FROM wp_term_relationships
LEFT JOIN wp_term_taxonomy ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
ORDER BY object_id ASC, term_id ASC)
AS objects_tags
LEFT JOIN wp_cb_tags2cats ON objects_tags.term_id = wp_cb_tags2cats.tag_ID
LEFT JOIN (SELECT wp_term_relationships.object_id, wp_term_taxonomy.term_id as cat_ID, wp_term_taxonomy.term_taxonomy_id
FROM wp_term_relationships
LEFT JOIN wp_term_taxonomy ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
WHERE wp_term_taxonomy.taxonomy = 'category'
GROUP BY object_id, cat_ID, term_taxonomy_id
ORDER BY object_id, cat_ID, term_taxonomy_id)
AS categories on wp_cb_tags2cats.cat_ID = categories.term_id
WHERE objects_tags.term_id = wp_cb_tags2cats.tag_ID
GROUP BY object_id, term_id, cat_ID, term_taxonomy_id
ORDER BY object_id ASC, term_id ASC, cat_ID ASC)
AS associations2
LEFT JOIN categories ON associations2.object_id = categories.object_id
WHERE associations2.cat_ID <> categories.cat_ID
GROUP BY object_id, term_id, cat_ID, term_taxonomy_id
ORDER BY object_id, term_id, cat_ID, term_taxonomy_id
サブセレクト内の「order by」句は効果がありません。重要な唯一の「order by」は最後のものです。また、「グループ化」句を取り除くことができるかどうかも疑問です。集約関数を使用しているようではないので、これらで達成しようとしていることがわかりません。あなたは "カテゴリ"の別名を付けた副選択を持っていますが、 "カテゴリ"というテーブルもあるようです。私はそれがあなたが尋ねたものではないことを知っていますが、これは物事を非常に混乱させます。 (...続き...) –
最後に、wp_term_relationshipsとwp_term_taxonomyに複数の結合があるようです。おそらくこれを行う必要はありませんが、私はこのクエリが何を達成しようとしているのか分からないので、私が言うのは難しいです。 –