【发布时间】:2015-03-08 16:28:45
【问题描述】:
我有一个php mysql查询的小问题,我正在寻求帮助。
我有一个家谱表,我在其中为每个人存储他/她的祖先 id,用逗号分隔。像这样
id ancestors
10 1,3,4,5
所以id 10的人是id 5的父亲,id 5的父亲是id 4的父亲,id 4的父亲是3等等......
现在我希望选择所有祖先中具有 id x 的人,因此查询将类似于: 从祖先喜欢 '%x%' 的人中选择 *
现在这可以正常工作,除非,如果 id x 假设为 2,并且记录的祖先 id 为 32,这样的查询将检索 32,因为 32 包含 2。如果我使用 '%,x,%' (包括逗号)查询将忽略其祖先 x 位于列的任一边缘(左侧或右侧)的记录。由于不存在逗号,它还将忽略 x 是唯一祖先的记录。
简而言之,我需要一个like 查询来查找一个被逗号包围或不被任何东西包围的表达式。或者在没有数字的情况下获取正则表达式的查询。而且我需要它尽可能高效(我不擅长编写正则表达式)
谢谢。
编辑:好的,伙计们,帮我想出一个更好的架构。
【问题讨论】:
-
你想出了一个糟糕的数据库设计。您将永远无法使其始终如一地工作或易于查询。您需要停下来阅读一下如何使用关系数据库创建一对多关系。只需做一个谷歌并沐浴在由此产生的知识中
-
我知道一对多。通常我会为每条记录存储他的直接父记录。但是,如果我希望使用一个查询来获取给定记录的所有子孙,我该怎么做?我不想检索孩子,然后为他们的孩子单独查询,我想这样我会做一个查询并全部获取。
-
实际上,物化路径在某些圈子里得到了很好的报道!