我正在尝试创建一个相对简单的可以搜索的分层标记系统。这是目前它的工作原理,这是 MySQL 表结构:
--------------------------------------------
id | tag | parentID | topParentID |
--------------------------------------------
1 | Boston | NULL | NULL |
--------------------------------------------
2 | Events | 1 | 1 |
--------------------------------------------
3 | June 30th | 2 | 1 |
--------------------------------------------
4 | NYC | NULL | NULL |
--------------------------------------------
5 | Attractions | 4 | 4 |
--------------------------------------------
因此,如果用户在搜索栏中输入波士顿,他们将收到建议“波士顿事件”和“6 月 30 日波士顿事件”。同样,如果他们在搜索栏中输入 NYC,他们将收到“NYC Attractions”作为建议。
此外,如果有人在搜索栏中输入“事件”,他们会得到“波士顿事件”建议,或者如果他们输入“6 月 30 日”,他们会得到“6 月 30 日波士顿事件”建议
我已经搞乱了代码来做到这一点,我绝对可以将查询字符串分解为关键字,然后在标签表中搜索每个关键字并返回匹配项,但我还没有找到返回完整内容的正确方法标签字符串采用我上面提到的格式。
最佳答案
嗯,您可以加入同一张表两次。假设我们有 $id - 当前标签的 id:
SELECT
tags.id,
tags.tag,
parent_tags.id,
parent_tags.tag,
parent2_tags.id,
parent2_tags.tag,
FROM
tags
INNER JOIN
tags AS parent_tags
ON
tags.parentID = parent_tags.id
INNER JOIN
tags AS parent2_tags
ON
tags.topParentID = parent2_tags.id
WHERE
tags.id=$id
但是它会给 parent 和祖 parent 两次,因为你的表中的数据不正确:parent.id = Parent2.id
实际上,这是一个非常原始的解决方案,仅允许在 1 个请求中显示 2 级层次结构。如果您想实现任何级别,请阅读堆栈上的嵌套集。还有一本很棒的书:《适合聪明人的 SQL 中的树和层次结构》,作者:Joe Celko
关于php - 标记层次结构和搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17842188/