kyl*_*lex 4 mysql hierarchical-data
鉴于下表
id parentID name image
0 0 default.jpg
1 0 Jason
2 1 Beth b.jpg
3 0 Layla l.jpg
4 2 Hal
5 4 Ben
Run Code Online (Sandbox Code Playgroud)
我想要做以下事情:
如果我搜索Ben,我想找到图像,如果没有图像,我想找到父母的图像,如果不存在,我想去祖父母的图像......直到我们点击默认图片.
最有效的方法是什么?我知道SQL并不是真正为分层值设计的,但这是我需要做的.
干杯!
Bil*_*win 12
MySQL缺少递归查询,这是标准SQL的一部分.许多其他品牌的数据库都支持此功能,包括PostgreSQL(请参阅http://www.postgresql.org/docs/8.4/static/queries-with.html).
在MySQL中有几种处理分层数据的技术.
还有一些聪明的技术来存储分层数据,以便您可以查询它们:
Path Enumeration存储每个节点的祖先列表.例如,示例中的照片5将存储"0-2-4-5".您可以通过搜索与"%"连接的路径与带LIKE谓词的5路径匹配的节点来搜索祖先.
嵌套集是一种复杂但聪明的技术,由Joe Celko在他的文章和他的书"树和SQL中的分层结构中为聪明人"推广.有很多关于它的在线博客和文章.查询树很容易,但很难查询直接的孩子或父母,很难插入或删除节点.
闭包表涉及将每个祖先/后代关系存储在单独的表中.查询树很容易,易于插入和删除,并且如果添加路径长度列,则可以轻松查询直接父项或子项.
您可以在我的演示文稿中查看比较这些方法的更多信息,这些方法可以在SQL或我即将出版的SQL反模式中找到:避免数据库编程的陷阱.