2016-03-28 3 views
1

に参加するとき、私は2つのテーブルをJOINをLEFTポストフェッチクエリを持って、あまりにも多くの重複値をconcatsカテゴリ名とタグ名の表ポストメタとしてGROUP CONCATは、LEFTは2つの異なるテーブル

LEFT JOIN wp_term_relationships AS term_link ON wpp.ID = term_link.object_id 
INNER JOIN wp_terms AS terms ON term_link.term_taxonomy_id = terms.term_id 

エクストラポストの詳細:今すぐ

LEFT JOIN wp_postmeta AS postmeta ON wpp.ID = postmeta.post_id 

。私は、MySQL GROUP_CONCATで、カンマでリスト内のすべてのカテゴリを表示する:

GROUP_CONCAT(terms.name SEPARATOR ', ') AS allcatname 

しかし、問題は、私の第二LEFTのwp_postmetaに登録しよう、である、何とか全てのカテゴリは、各wp_postmetaレコードのためにコピーされます見つけられた。

飲料、飲料、飲料、飲料、飲料、飲料、飲料、飲料、飲料、飲料、飲料、飲料、飲料、飲料、飲料、飲料、飲料、飲料:だから、私の 'allcatname' は、このようになります。飲料、飲料、飲料、飲料、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物、飲み物

だから...
私がGROUP_CONCATを維持したい理由は、「HAVING」を介してフィルタリングする必要があるからです。 私は、各投稿にリンクされているカテゴリレコードごとに1つのカテゴリのみを表示する方法を探しています:グループconcatを表示させます。例えば。 "ドリンク、ソーダ、コーラ"の3つのカテゴリがある場合は、ここで

がいっぱいクエリです:

SELECT 
    SQL_CALC_FOUND_ROWS 
    wpp.ID, wpp.post_title, wpp.post_author, 
    wpp.post_status, 
    GROUP_CONCAT(terms.name SEPARATOR ', ') AS allcatname 
FROM wp_posts AS wpp 

LEFT JOIN wp_term_relationships AS term_link ON wpp.ID = term_link.object_id 
INNER JOIN wp_terms AS terms ON term_link.term_taxonomy_id = terms.term_id 
LEFT JOIN wp_postmeta AS postmeta ON wpp.ID = postmeta.post_id 

WHERE wpp.post_type = 'post' 
    AND wpp.post_warning <> 'no_image' 
    AND wpp.post_status <> 'trash' 
    AND wpp.post_status <> 'auto-draft' 
    AND (post_title LIKE '%$search_string%' OR postmeta.meta_value LIKE '%$search_string%') 
GROUP BY wpp.ID 
ORDER BY post_date DESC 
LIMIT 20 
+0

? –

+0

ユーザが特定の検索を実行すると、phpはこのコードをWHEREに挿入します: 'AND(post_title LIKE '%textile%' OR postmeta.meta_value LIKE '%textile%') ' – mesqueeb

答えて

5

用途:

GROUP_CONCAT(DISTINCT terms.name SEPARATOR ', ') AS allcatname 

の代わりに:あなたは、このクエリで `postmeta`を使用しない

GROUP_CONCAT(terms.name SEPARATOR ', ') AS allcatname 
+0

これは私の問題を修正し、' DISTINCT'サウンド非常に明白です。しかし、なぜ実際に? – Timo002

関連する問題