我为我的站点创建了评论,无论主题是用户、帖子、照片还是其他任何内容,这些评论都存储在一个表中。为此,我创建了一个名为 type
的列,类型分别为 0 = user
、1 = post
、2 = photo
等等。但我还决定添加回复评论的选项,并且它是不确定的。因此,我简单地向表中添加了一个 reply
列,该列包含给定评论作为回复的评论的 ID。如果要显示某个照片的评论,我会这样选择它们
SELECT `stuff`
FROM `opinions`
WHERE `type`=2
然后,说一些评论有回复,为了得到这些我首先必须检查每个评论是否有任何回复,如果有,然后发送另一个 SQL 请求来获取回复并做同样的事情对于获取的回复等等等等,这似乎有点……错了。有人可以带领我走上正义的道路并向我展示光明吗?
表结构:
CREATE TABLE `opinions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` tinyint(3) unsigned NOT NULL,
`reply` int(11) NOT NULL,
`recipient` int(11) unsigned NOT NULL,
`sender` int(11) unsigned NOT NULL,
`opinion` text NOT NULL,
`time` int(11) NOT NULL
)
编辑:谢谢你们的帮助,但所有这些看起来都很复杂,我似乎无法理解如何实现它,因为我有无限数量的 child 和给出的大部分例子有很多 child 和东西。除非有人愿意花时间像对一个彻头彻尾的白痴一样向我解释这一点,否则我将只调用 ajax 来加载回复。
最佳答案
我认为您正在寻找类似 connect by prior
in oracle 的内容,请参阅这篇文章,这应该对您有所帮助。
http://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/
您也可以使用 Tree Order Traversal alghoritm(你也可以在维基百科上找到它),但它需要重新计算 left
和 right
值,每次你从你的表中添加/删除一些东西
关于MySQL Select Children(树/链结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18131287/