请教一个sql语句的问题。

一只老菜鸟 2010-08-12 01:07:48
应该说是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"]."'";

这两句怎么合并成一句呢?
...全文
88 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
一只老菜鸟 2010-08-12
  • 打赏
  • 举报
回复
楼上的朋友非常对不起,其实是在一个库里的`ews_attachment`其实就是`pictb`,我是为了在这里显示起来不乱,所以贴的时候由于粗心,没全改过来。不好意思。
Dleno 2010-08-12
  • 打赏
  • 举报
回复

$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);
一只老菜鸟 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaocai520 的回复:]
$rows = Array
(
'0' => Array
(
'id' => 9,
'picid' => 8
),

'1' => Array
(
'id' => 10,
'picid' => 12
)
)

foreach($arr as $k=>$v)
{
$arr1[$v['id']] = $v['pid'];
……
[/Quote]

$rows其实从数组库里读出的一组数据集合。
第二维数组里也不是只有id和picid,我只是为了简单说明问题所以简化了数组而已。
所以这个方式显然不成立的。。


[Quote=引用 3 楼 xiaocai520 的回复:]
有什么不明白的就问 思想就是这样
循环插入那是没办法 但是你循环查询哪就是个悲剧
[/Quote]

我不认为这里的循环查询是悲剧,反而一直潜意识里觉得这样的方式效率反而高。就是因为不肯定所以才来请教呢
xiaocai520 2010-08-12
  • 打赏
  • 举报
回复
有什么不明白的就问 思想就是这样
循环插入那是没办法 但是你循环查询哪就是个悲剧
xiaocai520 2010-08-12
  • 打赏
  • 举报
回复
$rows = Array
(
'0' => Array
(
'id' => 9,
'picid' => 8
),

'1' => Array
(
'id' => 10,
'picid' => 12
)
)

foreach($arr as $k=>$v)
{
$arr1[$v['id']] = $v['pid'];
}
xiaocai520 2010-08-12
  • 打赏
  • 举报
回复
吧这个二维的数据换为$arr(
)
implode(',',$arr);
你把数据里面的ID 变成一个字符串形式的$str 然后select * from tablename where in($str)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧