我有一个查询来获取我LEFT JOIN两个表的帖子:
类别和标签:LEFT JOIN到链接表→INNER JOIN到类别和标签名称表。
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 JOIN到wp_postmeta,不知何故,所有类别都会被复制,以便找到每个wp_postmeta记录。所以我的全部名称'看起来像这样:
饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料,饮料
发生了这种情况......
我想保留GROUP_CONCAT的原因是因为我需要它来过滤" HAVING"。 因此,我正在寻找一种方法,只显示与每个帖子相关联的每个类别记录的一个类别:让小组连续显示。例如。 "饮料,苏打水,可乐"如果它有这三个类别。
以下是完整的查询:
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 :(得分:4)
使用:
GROUP_CONCAT(DISTINCT terms.name SEPARATOR ', ') AS allcatname
而不是:
GROUP_CONCAT(terms.name SEPARATOR ', ') AS allcatname