应该说是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"]."'";这两句怎么合并成一句呢?
数组如下:$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"]."'";这两句怎么合并成一句呢?
)
implode(',',$arr);
你把数据里面的ID 变成一个字符串形式的$str 然后select * from tablename where in($str)
(
'0' => Array
(
'id' => 9,
'picid' => 8
), '1' => Array
(
'id' => 10,
'picid' => 12
)
)foreach($arr as $k=>$v)
{
$arr1[$v['id']] = $v['pid'];
}
$rows其实从数组库里读出的一组数据集合。
第二维数组里也不是只有id和picid,我只是为了简单说明问题所以简化了数组而已。
所以这个方式显然不成立的。。我不认为这里的循环查询是悲剧,反而一直潜意识里觉得这样的方式效率反而高。就是因为不肯定所以才来请教呢
$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);