Mysql SQL,如何获取与搜索查询匹配的项的父项
我正在向现有应用程序添加搜索功能栏。现在,查询是基于用户输入构建的。它从平面表返回项目,并基于表中的parentID和ID字段在前端构建对象的层次数组 目前,搜索工作如下。它返回与搜索输入匹配的项目。如果用户搜索土豆Mysql SQL,如何获取与搜索查询匹配的项的父项,mysql,sql,Mysql,Sql,我正在向现有应用程序添加搜索功能栏。现在,查询是基于用户输入构建的。它从平面表返回项目,并基于表中的parentID和ID字段在前端构建对象的层次数组 目前,搜索工作如下。它返回与搜索输入匹配的项目。如果用户搜索土豆 select foo.* from ... AND foo.name like "%$potato%" AND ... 我如何返回ID与potato的parentID匹配的项目,以便在搜索过程中保留前端的层次结构 最终目标是返回与搜索本身匹配的项和包含与搜索匹配的子项的任何父项,
select foo.* from ... AND foo.name like "%$potato%" AND ...
我如何返回ID与potato的parentID匹配的项目,以便在搜索过程中保留前端的层次结构
最终目标是返回与搜索本身匹配的项和包含与搜索匹配的子项的任何父项,但不包括其他不匹配的子项。层次结构可能是无限的,因此子级可以有子级。因此,我假设需要某种程度的递归性,但我不确定如何做到这一点
值得注意的是,这是一个相当大的web应用程序,我无法更改任何内容,因此我必须围绕现有的查询格式进行工作。我相信您要查找的是…所有匹配%potato%的记录加上所有ID与所有%potato%的父ID匹配的记录。 您可以添加类似以下内容的或条件
选择。。。从…起和foo.name(如%potato%)或foo.ID(如从foo中选择parentID),其中foo.name(如“%potato%”…) 假设foo表中有parentId字段,该字段与同一表中另一条记录的id字段相匹配,则可以执行自联接以返回父项的数据。我使用左联接,因为并非所有项都有父项
select *
from foo f1
left join foo f2 on f1.parentId=f2.id
where f1.name like ...
但是,解析应用程序结果集中的字段名时可能会遇到问题。您必须从结果集中获取元数据,该元数据告诉您给定字段来自哪个表,或者需要为父表中的每个字段提供特定的字段别名
您可能还希望按f1.parentId对结果集排序,以确保逐个检索所有匹配的子记录。我将在应用程序级别执行循环,因为MySQL不能真正返回树结构,除非您希望在MySQL中组装json字符串