我正在尝试展示带有标签的文章。下面的查询非常有效。
这是我的疑问:
SELECT
item.item_id,
item.item_title,
item.item_createdate,
GROUP_CONCAT(tag.tag_name) AS TagName
FROM
item
LEFT JOIN `item-tag` ON `item-tag`.item_id = item.item_id
LEFT JOIN tag ON tag.tag_id = `item-tag`.tag_id
/*WHERE item.item_type = 1*/
GROUP BY
item.item_id
ORDER BY
item_createdate
DESC
当我过滤结果时,我遇到了问题。如果我想查看"标签1"的结果?我添加了where子句:
WHERE tag.tag_name = 'Tag 1'
这会删除GROUP_CONCAT
中的其他标记
我得到了这个结果:
如何获取已标记的文章并显示该文章的其他标记?
答案 0 :(得分:1)
尝试:
temp = []
for c in ['A','B',C']:
#create new dataframe for letter
#append new frame to temp
return pd.concat(temp)
请注意,tag_name上的过滤器不起作用,因为GROUP_CONCAT和GROUP BY逻辑上生成一个更大的表,然后从中连接结果。过早过滤会从较大的表中删除条目,因此标记不会出现在连接中。
另一种方法是将现有查询用作子查询,并用
包围它WHERE EXISTS
(SELECT tag_id FROM tag
JOIN `item-tag` tmp ON tag.tag_id = tmp.tag_id
WHERE tmp.item_id = item.item_id AND tag.tag_name = 'Tag 1')
答案 1 :(得分:1)
SELECT
item.item_id,
item.item_title,
item.item_createdate,
GROUP_CONCAT(tag.tag_name) AS TagName
FROM
item
LEFT JOIN `item-tag` ON `item-tag`.item_id = item.item_id
LEFT JOIN tag ON tag.tag_id = `item-tag`.tag_id
--limit your existing query by only including item_ids with 'Tag 1'
WHERE item.item_id IN(
SELECT `item-tag`.item_id
FROM tag INNER JOIN `item-tag` ON tag.tag_id=`item-tag`.tag_id
WHERE tag.tag_name=?
)
GROUP BY
item.item_id
ORDER BY
item_createdate
DESC
请注意,我使用了一个将在预准备语句中使用的占位符。对于PHPMyAdmin,当然只需将值替换为?
个人偏好 - 我会将表格命名为item_tag
,这样您就不必使用那些讨厌的反斜杠......