小白感谢各位大大对于自己上一个帖子的帮助,终于弄明白是怎么回事了。 现在遇到了另一个问题:我通过一个页面让用户提交了12个多选列表,
获取出来就是12个数组,然后根据这12个数组里的内容进行数据库搜索,可是发现好像没有办法把这12个数组里的内容一项一项提取出来,然后写sql查询语句。。比如:$a = array(a,b,c,d);
$b = array(1,2,3,4);
$c = array(I,II,III,IV);
然后我想select * from 表名 where name=a AND name=b AND name=c AND name=d AND name=1 AND name=2..... AND name=IV不知道如何可以实现呢?用foreach循环的话,只怕每次都是当前元素的值,这样查出来是每一个当前元素可以搜索到的结果但是我想查询的是所有数组里所有元素存在的条件下,最后的结果。。求助各位高人!

解决方案 »

  1.   

    呵呵,那么多AND可能找到东西么?
    $a = array('a','b','c','d');
    $b = array(1,2,3,4);
    $c = array('I','II','III','IV');
    #保证$a,$b,$c任意一个非空数组,自己判断                                                                                                      
    echo "select * from table where name='".implode("' OR name='",array_merge($a,$b,$c))."'";
      

  2.   

    在吃饭,给你提示
    1个是将数组暑输出字符串 implode(',',$arr) 标点符号什么的自己再加工吧
    1个是修改你的SQL 语句 将同个数组AND 什么的修改成 IN 
    例如 IN ('a','b','c','d')即可
      

  3.   


    笛,笛卡尔积? 恩,就是全部AND 起来
      

  4.   


    谢谢回复! 如果是name IN ('a','b','c','d'),那么应该是OR的关系吧?还是我理解错了?
      

  5.   


    谢谢回复! 呵呵,一般不会用到那么多数组,一般是4-5个吧。 弱弱滴问下,这句话:echo "select * from table where name='".implode("' OR name='",array_merge($a,$b,$c))."'" , implode 里面是OR name= 还是应该and name= 呢? 小白不太懂,恳请赐教!
      

  6.   


    全部都in到1个里面就可以了,不需要担心效率问题.name 做个索引
      

  7.   


    呵呵,刚才查了一下,不是笛卡尔积,只是线性地将每个数组加起来,就像楼上说的,用array_merge,只是merge之后我还是不会如何使得name=a[0] AND name=a[1] AND name=a[2] AND name=a[3]....
      

  8.   


    我突然发现,还有一个问题就是:mhf.FD_NAME这个字段得同时等于不同的值这个让我比较困惑,是不是应该用notexist呢?如果是,代码该怎么写呢?