【发布时间】:2010-04-09 04:04:59
【问题描述】:
我正在使用祖先 gem 来帮助在数据库中组织我的应用程序的树结构。它基本上将孩子的祖先信息写入一个名为“祖先”的特殊列。特定孩子的祖先列可能看起来像“1/34/87”,其中该孩子的父母是 87,然后 87 的父母是 34,而 34 的父母是 1。
似乎我们可以从这个表中选择行,每个行都有一个子查询来检查所有的祖先,看看它是否设置了某个属性。例如。在我的应用程序中,您只需将父元素的可见性列设置为 0 即可隐藏项目及其子项。
我希望能够找到没有隐藏其祖先的所有项目。我尝试使用 REPLACE 命令将斜杠转换为逗号,但 IN 需要一组逗号分隔的整数,而不是一个带有逗号分隔的字符串编号的字符串。
这很有趣,因为我可以分两步完成这个查询,例如检索该行,然后获取其祖先列,拆分 id 并进行另一个查询,检查 id 是否在该组 id 中,并且可见性不是 0 和 whala!但是将这些加入到一个查询中似乎是一项艰巨的任务。大量搜索显示了一些答案,但没有一个真正符合我的要求。
SELECT * FROM t1 WHERE id = 99;
99 的祖先栏写着 '1/34/87'
SELECT * FROM t1 WHERE visibility = 0 AND id IN (1,34,87);
有点倒退,但如果这不返回任何行,则该项目是可见的。
有没有人遇到过这种情况并提出解决方案。我真的不想走存储过程路线。这是一个 Rails 应用程序。
【问题讨论】:
标签: sql mysql ruby-on-rails tree