【发布时间】:2020-02-27 05:54:31
【问题描述】:
我得到了 3 个结构如下的表:
//postsTable
// pid, userID, parentID, title, date
//userTable
// userID, username, loginDate
//tagTable
// id, pid, tag
当一个新帖子发布时,用户可以输入多个标签,每个标签存储在tagTable的单独一行中。
假设用户输入了 3 个标签。
然后,postTable 中放 1 行,tagTable 中放 3 行
当我选择时,我正在使用这个查询:
select p.*, c.*, t.*
from postTable as p
join userTable as c
on p.userID = c.userID
join tagTable as t
on p.pid = t.pid
where p.parentID='0'
order by p.date desc limit 10
我希望这只会从 postTable 中选择一条记录,并从 tagTable 中输入 3 个标签中的一个,然后它会跳到 postTable 中的下一行,忽略同一篇文章的其他 2 个标签...
但是它选择了 3 条记录,除了 t.* 的值之外,都是重复的。
基本上,这就是我想要的。
从postTable中选择帖子,然后从tagTable中选择一个标签然后跳到postTable中的下一行,对于已经选择的帖子,忽略tagTable中遗漏的2个标签。
类似 distinct(p.pid)、c.userID、c.username、t.tag
我在这里做错了什么?
【问题讨论】:
-
您使用 group by,但您必须添加类似 MIN(Ttag) 的内容,或者如果您希望所有标签使用 GROUP_CONCAT。其余的我们相等而不是在 Grou By 中,您可以使用 MIN 但对于标签,您必须从这些 dev.mysql.com/doc/refman/8.0/en/group-by-functions.html 中选择一个
-
它不工作。我用 group_concat( t.tag ) 替换了 "t.*",然后在 "order by p.date,我添加了这个 "group by p.pid" 之后,现在我收到一个 mysql 错误,说 "检查 mysql 手册在“group by p.pid”附近使用正确的语法
标签: mysql database string join group-by