请教把多个查询参数整合进一句SQL语句的思路或者方法~~~~~~~

时间:2021-02-02 15:13:18
`有一个数据表,里面有多个字段,而输出数据都是在一个名为list.php的页面里输出,只不过根据不同条件来筛选数据输出

例如:这个表(passage)储存的是文章信息,有文章ID(id)、文章标题(title)、文章内容(content)、文章类别ID(kind_id)、文章发布者(user)、发布时间(time)。。。等等等等。。。。

筛选的时候会多条件联合筛选,于是,设计SQL语句的时候就觉得很麻烦了,传递到list.php的参数有一个或者多个,可是又不想用if等分支流程,只想用一句SQL语句处理,头疼着该怎么处理并整合好这些参数进去一句SQL语句里面才好。。各位能否有一个好的处理办法?



下面贴出我现在的~~只是处理几个筛选就觉得将来维护起来会很困难。。

kind是类别表、里面有父分类子分类等等,kindarr是存放着类别ID的一维数组


$kind=$_GET['kind']+0;
$querykind=mysql_query("select * from kind where kind_id='$kind' or kind_fid='$kind' order by kind_id asc");
while($resultkind=mysql_fetch_array($querykind))
{
$kindarr[]="kind_id='".$resultkind['kind_id']."' ";//把当前选择分类的ID和其子分类ID都放进数组

}



//中间省略部分


if($kind==0)//没有选择分类就显示全部
{
$sql="select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id limit $startrecord,$offset";
}
else
{
$sql="select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id where ".implode(' or ',$kindarr)."limit $startrecord,$offset";
}



很搓是吧?我也觉得挺搓的~~~~恳请指教思路~~

8 个解决方案

#1


$sql="select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id where  $kind=0 or  kind.kind_id='$kind' or kind.kind_fid='$kind' limit $startrecord,$offset";

其中
kind.kind_id='$kind' or kind.kind_fid='$kind' 用于检索指定 id 及其一级子节点
你的第一轮循环似乎可以不要
$kind=0 用于判定是否有指定 id 传入,如没有则是 0=0 条件恒成立,检索出全部记录

#2


大哥你误会我意思了~~~我的主要问题是怎么把这么多个参数整合进去SQL语句里面。。。数据表参照上面帖子
有时需要根据kind_id来取结果,有时需要kind_id + user,有时需要......等等
上面数据表所说到的这些参数需要*组合来查询数据~~有时一个有时多个~~~~
而想用一句SQL语句来整合这些参数~~~目测where...and和where....or是做不到的了~~~~
有没有什么办法可以解决?
引用 1 楼 xuzuning 的回复:
$sql="select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id where $kind=0 or kind.kind_id='$kind' or kind.kind_fid='$kind' limit $startrecord,$offset";

其中
kind.kind_i……

#3


select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id limit $startrecord,$offset"
这个我不太明白您 意思。。。你要查所有passage的信息是么? 但为什么要这么做。。。不明白。。说说吧。

#4


引用 1 楼 xuzuning 的回复:
$sql="select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id where $kind=0 or kind.kind_id='$kind' or kind.kind_fid='$kind' limit $startrecord,$offset";

其中
kind.kind_i……


这位大哥 发的正合你意思才对啊。。。。。

#5


引用 2 楼 q503959 的回复:
大哥你误会我意思了~~~我的主要问题是怎么把这么多个参数整合进去SQL语句里面。。。数据表参照上面帖子
有时需要根据kind_id来取结果,有时需要kind_id + user,有时需要......等等
上面数据表所说到的这些参数需要*组合来查询数据~~有时一个有时多个~~~~
而想用一句SQL语句来整合这些参数~~~目测where...and和where....……
你根本就没有描述的的需求:无论是文字还是代码
我只能根据你表述出来的内容提供参考意见

#6


我也想知道这个怎么实现呢!

#7


这个问题已经在MYSQL板块解决掉了~~无法在SQL层解决~~~只能在代码用分支流程来拼接SQL语句~~~~
谢谢~~
~~~

引用 5 楼 xuzuning 的回复:
引用 2 楼 q503959 的回复:大哥你误会我意思了~~~我的主要问题是怎么把这么多个参数整合进去SQL语句里面。。。数据表参照上面帖子
有时需要根据kind_id来取结果,有时需要kind_id + user,有时需要......等等
上面数据表所说到的这些参数需要*组合来查询数据~~有时一个有时多个~~~~
而想用一句SQL语句来整合这些参数~~~目测wh……


引用 6 楼 rrhhll 的回复:
我也想知道这个怎么实现呢!

#8


意思是说 作为条件
$sql = "select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id where 1=1 "

之后 按你需要 得到参数作为 判断
if($kind==0){
   $sql .=  " or  条件1";
}elseif($king的条件){
   $sql .= " ro 条件";
}...
....
这么说吧?

#1


$sql="select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id where  $kind=0 or  kind.kind_id='$kind' or kind.kind_fid='$kind' limit $startrecord,$offset";

其中
kind.kind_id='$kind' or kind.kind_fid='$kind' 用于检索指定 id 及其一级子节点
你的第一轮循环似乎可以不要
$kind=0 用于判定是否有指定 id 传入,如没有则是 0=0 条件恒成立,检索出全部记录

#2


大哥你误会我意思了~~~我的主要问题是怎么把这么多个参数整合进去SQL语句里面。。。数据表参照上面帖子
有时需要根据kind_id来取结果,有时需要kind_id + user,有时需要......等等
上面数据表所说到的这些参数需要*组合来查询数据~~有时一个有时多个~~~~
而想用一句SQL语句来整合这些参数~~~目测where...and和where....or是做不到的了~~~~
有没有什么办法可以解决?
引用 1 楼 xuzuning 的回复:
$sql="select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id where $kind=0 or kind.kind_id='$kind' or kind.kind_fid='$kind' limit $startrecord,$offset";

其中
kind.kind_i……

#3


select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id limit $startrecord,$offset"
这个我不太明白您 意思。。。你要查所有passage的信息是么? 但为什么要这么做。。。不明白。。说说吧。

#4


引用 1 楼 xuzuning 的回复:
$sql="select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id where $kind=0 or kind.kind_id='$kind' or kind.kind_fid='$kind' limit $startrecord,$offset";

其中
kind.kind_i……


这位大哥 发的正合你意思才对啊。。。。。

#5


引用 2 楼 q503959 的回复:
大哥你误会我意思了~~~我的主要问题是怎么把这么多个参数整合进去SQL语句里面。。。数据表参照上面帖子
有时需要根据kind_id来取结果,有时需要kind_id + user,有时需要......等等
上面数据表所说到的这些参数需要*组合来查询数据~~有时一个有时多个~~~~
而想用一句SQL语句来整合这些参数~~~目测where...and和where....……
你根本就没有描述的的需求:无论是文字还是代码
我只能根据你表述出来的内容提供参考意见

#6


我也想知道这个怎么实现呢!

#7


这个问题已经在MYSQL板块解决掉了~~无法在SQL层解决~~~只能在代码用分支流程来拼接SQL语句~~~~
谢谢~~
~~~

引用 5 楼 xuzuning 的回复:
引用 2 楼 q503959 的回复:大哥你误会我意思了~~~我的主要问题是怎么把这么多个参数整合进去SQL语句里面。。。数据表参照上面帖子
有时需要根据kind_id来取结果,有时需要kind_id + user,有时需要......等等
上面数据表所说到的这些参数需要*组合来查询数据~~有时一个有时多个~~~~
而想用一句SQL语句来整合这些参数~~~目测wh……


引用 6 楼 rrhhll 的回复:
我也想知道这个怎么实现呢!

#8


意思是说 作为条件
$sql = "select * from passage LEFT JOIN kind ON passage.kind_id = kind.kind_id where 1=1 "

之后 按你需要 得到参数作为 判断
if($kind==0){
   $sql .=  " or  条件1";
}elseif($king的条件){
   $sql .= " ro 条件";
}...
....
这么说吧?