MySQL-php查询数据再根据结果循环查询
字段:
id user pwd vid
1 a 123
2 b 345 1
3 c 567 2
4 d 789 3
5 e 012 3
6 f 345 4
$user=$_POST['user'];
$s="select * from `tabe` where `user` = '$user'";
$quer=mysql_query($s);
while($r=mysql_fetch_array($query)){
$userid=$r[0];
}
if($userid){
$sql="select * from `tabe` where `vid`='$userid'";
$q=mysql_query($sql);
while($row=mysql_fetch_array($q)){
echo $row[1];
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
SELECT vid , GROUP_CONCAT(id,'|') FROM A
WHERE id=vid
GROUP BY vid
这样行么?
修订:
lz的意思是否就是提取出 以 vid 分组的 记录列表呢
那 SELECT vid , GROUP_CONCAT(id) FROM p1 GROUP BY vid 就能满足lz呢?
你取出 每个uid对应的 vid 假设其为x,然后去取出 表中vid = x 的记录
换个方向来想 是不是 就是以 vid 分组呢?
如果想取出某个用户对应的 vid的 是否可以使用
SELECT vid , GROUP_CONCAT(id) FROM p1
WHERE vid IN ( SELECT vid FROM p1 WHERE NAME='D' )
GROUP BY vid
测试表结构如下:
CREATE TABLE
p1
(id
int(11) NOT NULL,name
char(40) NOT NULL,vid
int(11) NOT NULL,PRIMARY KEY (
id
)) ENGINE=InnoDB DEFAULT CHARSET=latin1
这种需求直接 用数据库查询够瞧的.
建议如果可以的话, 把id和vid 从数据库一次查询出来, 在php中做两个hash.
id_vid:
1: ;
2:1;
3:2;
4:3;
5:3;
6:4.
vid_id
1:[2];
2:[3];
3:[4,5]
4:[6]
php程序递归查找, 伪码:
function search(id){
vid=id_vid[id];
ids=vid_id[vid]
foreach id1 in ids:
search(id);
}
注意不要有id和vid循环查询的情况.
更新一下
网上找了一下 大概的计算php数组大小的方法:
$before=memory_get_usage();
$arr=array();
for($i=10000000;$i<15000000;$i++){ //500w数据
$arr[$i]=$i+100;
}
$after=memory_get_usage();
print_r(($after-$before)/1024/1024);
如果id为数字型, 通过上面的脚本算一下, php5.4.3, win7 x64:
100w的数组, 占用内存大小为130m;
500w的数组, 占用内存大小为674m;
1000w的数组, 为1349m.