应该说是2个问题。。
数组如下:$rows = Array
(
    '0' => Array
        (
            'id' => 9,
            'picid' => 8
        ),    '1' => Array
        (
            'id' => 10,
            'picid' => 12
        ),    '2' => Array
        (
            'id' => 11,
            'picid' => 16
        ),    '3' => Array
        (
            'id' => 12,
            'picid' => 20
        ),    '4' => Array
        (
            'id' => 13,
            'picid' => 24
        ),    '5' => Array
        (
            'id' => 14,
            'picid' => 28
        ),    '6' => Array
        (
            'id' => 15,            'picid' => 32
        ),    '7' => Array
        (
            'id' => 16,
            'picid' => 36
        ),    '8' => Array
        (
            'id' => 17,
            'picid' => 40
        ),    '9' => Array
        (
            'id' => 18,
            'picid' => 44
        ),    '10' => Array
        (
            'id' => 19,
            'picid' => 48
        ));第一个思路是构造sql语句:
$count = 0;
$sql = "SELECT * FROM `pictb` WHERE";
foreach($rows as $row){
$filehash = $db->getOne("SELECT filehash FROM `pictb` WHERE id=".$row["picid"]);
if($count<1){
$sql .="  filehash='".$filehash["filehash"]."'";
}else{
$sql .=" OR filehash='".$filehash["filehash"]."'";
}
$count++;
}
$filehash为长度16的任意字符串这样构造下来sql语句很长。第二个思路是在数组内部处理。
foreach($rows as $row){
$filehash = $db->getOne("SELECT filehash FROM `pictb` WHERE id=".$row["picid"]);
$sql ="SELECT * FROM `ews_attachment` WHERE filehash='".$filehash["filehash"]."'";
$arr[] = $db->getRows($sql);
}
将所有数据压缩到一个数组里,然后再遍历出来进行处理。
我感觉第二种比较复杂,但是应该效率会高些。但又不肯定。所以请教一下:
这两个过程哪个效率高些?
另外,我想请教一下
$filehash = $db->getOne("SELECT filehash FROM `pictb` WHERE id=".$row["picid"]);
$sql ="SELECT * FROM `ews_attachment` WHERE filehash='".$filehash["filehash"]."'";这两句怎么合并成一句呢?

解决方案 »

  1.   

    吧这个二维的数据换为$arr(
    )
    implode(',',$arr);
    你把数据里面的ID 变成一个字符串形式的$str  然后select * from tablename where in($str)
      

  2.   

    $rows = Array
    (
        '0' => Array
            (
                'id' => 9,
                'picid' => 8
            ),    '1' => Array
            (
                'id' => 10,
                'picid' => 12
            )
    )foreach($arr as $k=>$v)
    {
        $arr1[$v['id']] = $v['pid'];
    }
      

  3.   


    $rows其实从数组库里读出的一组数据集合。
    第二维数组里也不是只有id和picid,我只是为了简单说明问题所以简化了数组而已。
    所以这个方式显然不成立的。。我不认为这里的循环查询是悲剧,反而一直潜意识里觉得这样的方式效率反而高。就是因为不肯定所以才来请教呢
      

  4.   


    $picid=array();
    foreach($rows as $k=>$v){
      $picid[] = $v['picid'];
    }
    $picid = "'".join("','",$picid)."'";
    $sql="SELECT p.filehash,a.* FROM `pictb` p
    left join `ews_attachment` a on a.filehash=p.filehash
    WHERE p.id in($picid)";
    $query=mysql_query($sql);
    $data=array();
    while($row = mysql_fetch_array($query)){
        $data[]=$row;
    }
    print_r($data);
      

  5.   

    楼上的朋友非常对不起,其实是在一个库里的`ews_attachment`其实就是`pictb`,我是为了在这里显示起来不乱,所以贴的时候由于粗心,没全改过来。不好意思。