有关mysql查询问题,请教大家

来源:百度知道 编辑:UC知道 时间:2024/06/28 20:21:46
include('pageft.php');
$xq_sqlpage = "select count(distinct(mp)) AS num from mp_ly";
$xq_querypage = mysql_query($xq_sqlpage);
$xq_rowpage = mysql_fetch_array($xq_querypage);
$total = $xq_rowpage[num];
pageft($total,80);
$result=mysql_query($strSql);
while($row=mysql_fetch_array($result)){
select * from mp_ly where lytime in (select max(lytime) from mp_ly group by mp) ORDER BY lytime desc limit $firstcount,$displaypg; 这句是查找最近的一条留言,按照留言时间来降序排列的。现在要按照这个表中回复了的留言数量除以总数量的百分比来排序,表中留言总数量(select count(*) AS num from mp_ly where mp='$row[mp]')和已回复数量(select count(*) AS num from mp_ly where mp='$row[mp]' and reply!=''//reply是已回复字段),现在要按照这个回复百分比来排序改怎么写。
PS:这个语句的效率很低,在1000条数据里面查找除符合的数据有140条用了4-5秒钟。。。还可以优化吗?
请教高手帮忙了,先谢谢了~
上面的是分页的代码,我怕自己描述的不清楚,所以直接都拿过来了。最近做分页的条件查询总遇到mysql查询语句的问题,看来还要恶补一下数据库语言

如果优化的话,sql语句的优化真的很难。。
看了一下mp好像是主题的意思吧。。
再建立一个表..
做一个数据冗余,字段为
主题,留言总数,回复数,最后留言id,最后留言时间
这样你的sql就非常容易写了。。只是在留言入库时会慢一些。。。但入库慢换来显示快,是很值得的

SELECT a.*, b.* FROM 留言表 AS a, 主题表 AS b WHERE a.id = b.id ORDER BY a.留言时间 DESC
这是按时间来倒序显示

SELECT a.*, b.* FROM 留言表 AS a, 主题表 AS b WHERE a.id = b.id ORDER BY a.回复数/a.留言总数 DESC

你觉得呢。。。适量的冗余是一种优化。。。这样的查询会非常的快,,你只要把关联的id加上索引就可以了, 还有就是,子查询尽量不要去用。。效率非常低下

太专业了吧 今天刚考了数据库 那叫一个难啊 唉 祝你好运 早日解决问题哦