php高手来帮忙,mysql怎么用一句代码输出数组数据?

kwdpx 2011-10-28 11:43:44
数据库:member

用户名user 登录次数count 登录时间timeset 序号id

aaaa 22 1310344207 1
bbbb 47 1310344208 2
cccc 33 1310344209 3

现在要输出三组,分别按 登录次数、注册时间、ID排列,普通写法要写三组,这样给数据库是不是读写压力太大了:
//按登录次数
$query="select * from member order by count Limit 0,100";
$result=mysql_query($query,$db);
while ($arr=mysql_fetch_array($result))
{
$count.="$arr[user]";
}

//按注册时间
$query="select * from member order by timeset Limit 0,100";
$result=mysql_query($query,$db);
while ($arr=mysql_fetch_array($result))
{
$timeset.="$arr[user]";
}

//按ID
$query="select * from member order by id Limit 0,100";
$result=mysql_query($query,$db);
while ($arr=mysql_fetch_array($result))
{
$id.="$arr[user]";
}

请问能不能直接一句搞定?
怎么写?比如
$tr_list = array();
$query="select * from member …… in (count,timeset,id) ? Limit 0,10";
$result=mysql_query($query,$db);
while ($arr=mysql_fetch_array($result))
{
$tr_list_index[$arr[' ? ']] .="$arr[user]";
}

具体怎么写,请帮忙,谢谢
...全文
329 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
kwdpx 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jxsrsxyx 的回复:]

这个其实我也有用到过这种情况
方法是用UNION ALL语句。
SQL code

(SELECT * FROM member ORDER BY count LIMIT 0,100)
UNION ALL
(SELECT * FROM member ORDER BY timeset LIMIT 0,100)
UNION ALL
(SELECT * FROM member ORDER BY i……
[/Quote]


怎么输出呢?
$result=mysql_query($query,$db);
while ($arr=mysql_fetch_array($result))
{
$count.="$arr[user]";
}
binarie 2011-11-02
  • 打赏
  • 举报
回复
不过我这里测试,
对于非PRIMARY KEY索引(INDEX),
10GB的表(一个系统性能日志记录的表,大概580万条记录),对该索引进行排序速度依然很快,
返回前100条记录的时间在0.045秒左右。
foolbirdflyfirst 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 helloyou0 的回复:]

引用 11 楼 foolbirdflyfirst 的回复:

你可以一条语句直接select * from member limit 0, 100取出结果
==============================================================
你可以一条语句直接select * from member取出结果

引用 10 楼 binarie 的……
[/Quote]
如果表数据实在太大,表分表,分区,数据缓存什么的都该上了。
我的主要意思是,本来order by一个非primary key已经是一次全表扫描了,你认为类似#2楼union all两次全表扫描在数据量大的时候可以这么用么?返回数据是少了,mysql压力却加大了。
或许LZ目前阶段只求功能实现,我的目的最主要是想提个醒,至于能有数据量大的时候,说明站点开始迈入成功了,搞个memcached服务器还不是说上就上,或者单独开一台mysql服务器专做统计也不是不行.
说点实在的,如果是我做这样的东西,在硬件条件一般,在不上缓存服务器的情况下,我做法是建多几个统计表,比如user_orderby_count,限1000条,存储登录次数最多的前1000个用户,每次用户登录啥的就更新这个表的数据,删除用户就把之前第1001条记录从主表更新过来(这个麻烦点,不过是后台操作,可以接受)。
这个问题我是吃过亏的,所以想说的多一点。呵呵
码无边 2011-11-02
  • 打赏
  • 举报
回复
mysql里面最好不要进行计算,性能伤不起……
foolbirdflyfirst 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 kwdpx 的回复:]

怎么都答非所问啊?!
[/Quote]
你就用#2楼的吧,是有点偏题了。
等你数据量上来,自然有你自己的优化方案。
都怪我多嘴。。。
kwdpx 2011-11-02
  • 打赏
  • 举报
回复
怎么都答非所问啊?!
helloyou0 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 foolbirdflyfirst 的回复:]

你可以一条语句直接select * from member limit 0, 100取出结果
==============================================================
你可以一条语句直接select * from member取出结果

引用 10 楼 binarie 的回复:

看需求呗,如果性能瓶颈在I/O,就让php来排序,如……
[/Quote]

你的意思是把全表读到php里.....? 你知道他表里有多少行?
dianyue0311 2011-11-01
  • 打赏
  • 举报
回复
参照2楼
foolbirdflyfirst 2011-11-01
  • 打赏
  • 举报
回复
你可以一条语句直接select * from member limit 0, 100取出结果
==============================================================
你可以一条语句直接select * from member取出结果

[Quote=引用 10 楼 binarie 的回复:]

看需求呗,如果性能瓶颈在I/O,就让php来排序,如果性能瓶颈在运算上,感觉交给mysql好一些
[/Quote]
运算交给数据库?
这话对oracle等数据应该说可以考虑,对mysql的话要小心,用户量一大,几个整表扫描语句够吃一壶的。
binarie 2011-11-01
  • 打赏
  • 举报
回复
看需求呗,如果性能瓶颈在I/O,就让php来排序,如果性能瓶颈在运算上,感觉交给mysql好一些
foolbirdflyfirst 2011-11-01
  • 打赏
  • 举报
回复
这种sql语句,除了primary key,order by肯定会用到Using filesort,那就是一个整表扫描.
binarie 2011-11-01
  • 打赏
  • 举报
回复
排序的工作还是交给mysql来做比较好,如果建立了索引,mysql的排序速度很快的。
要是用php的排序函数来进行,可能不如mysql。
foolbirdflyfirst 2011-11-01
  • 打赏
  • 举报
回复
你可以一条语句直接select * from member limit 0, 100取出结果
然后order by那些东西完全可以用php实现。
提示你两个函数:array_multisort和usort.
xu920242517 2011-11-01
  • 打赏
  • 举报
回复
等待中......
拜華教徒 2011-10-29
  • 打赏
  • 举报
回复
这个其实我也有用到过这种情况
方法是用UNION ALL语句。

(SELECT * FROM member ORDER BY count LIMIT 0,100)
UNION ALL
(SELECT * FROM member ORDER BY timeset LIMIT 0,100)
UNION ALL
(SELECT * FROM member ORDER BY id LIMIT 0,100)

kwdpx 2011-10-29
  • 打赏
  • 举报
回复
我想问能不能一句搞定?

$query="select * from member …… in (count,timeset,id) ? Limit 0,10";

这样的怎么写,怎么输出?
amani11 2011-10-29
  • 打赏
  • 举报
回复
相关字段加索引,,数据库没啥压力的


最好仅取需要的字段即可,一般不要用*

21,886

社区成员

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

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