`有一个数据表,里面有多个字段,而输出数据都是在一个名为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";
}很搓是吧?我也觉得挺搓的~~~~恳请指教思路~~

解决方案 »

  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是做不到的了~~~~
    有没有什么办法可以解决?
      

  3.   

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

  4.   

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

  5.   

    意思是说 作为条件
    $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 条件";
    }...
    ....
    这么说吧?