比如一个表
chapterid chapter
1 a
1 b
1 c
2 d
2 e
3 f
1 g
2 h
2 i
1 gchapterid字段 1 重复了5次
2重复了4次
3出现了1次
我现在想让重复超过3次的 显示3次 没超过的就全部显示
比如显示成
chapterid chapter
1 a
1 b
1 c
2 d
2 e
2 h
3 f
这个查询sql语句 怎么写 我是mysql数据库 所以top好像是不能用的吧 mysql里可以用limit来限制显示条数
chapterid chapter
1 a
1 b
1 c
2 d
2 e
3 f
1 g
2 h
2 i
1 gchapterid字段 1 重复了5次
2重复了4次
3出现了1次
我现在想让重复超过3次的 显示3次 没超过的就全部显示
比如显示成
chapterid chapter
1 a
1 b
1 c
2 d
2 e
2 h
3 f
这个查询sql语句 怎么写 我是mysql数据库 所以top好像是不能用的吧 mysql里可以用limit来限制显示条数
用过程或者php脚本配合吧.
<?php
conect();
select_db();
$result=mysql_query("select distinct(chapterid) from table_name");
$is_first=true;
while($row=mysql_fetch_array($result)){
if($is_first)
$sql="select * from table_name where chapterid=$row['chapterid'] limit 3";
else
$sql.="union select * from table_name where chapterid=$row['chapterid'] limit 3";
$is_fist=false;
}
$result=mysql_query("$sql");
?>
不过表太大的话,查询语句可能过长.那就要另想办法了.
on a.chapterid = b.chapterid
SELECT A.chapter,A.chapterid FROM TRY1 A LEFT JOIN
TRY1 B ON A.chapterid=B.chapterid AND A.ID>=B.ID
GROUP BY A.chapter,A.chapterid HAVING COUNT(*)<=3 ORDER BY A.chapterid,COUNT(*)
我重新写下吧
表T含2个字段 chapterid 和 chapter
chapterid chapter
1 a
1 b
1 c
2 d
2 e
3 f
1 g
2 h
2 i
1 g 要显示成
chapterid chapter
1 a
1 b
1 c
2 d
2 e
2 h
3 f
字母是chapter字段下面的
这个辅助列ID的内容要填什么啊从HAVING COUNT(*) <=3 来看 好像将显示出来的也是chapterid重复少于3次的记录啊
再请教一下 这样内联对一个近1百万的表频繁查询是不是太耗费资源了?
还有一个重要的问题 要怎么让那显示出来的3条记录不是固定的,比如总共有5条,我想让他随机的显示出3条
mysql能实现吗
再请教一下 这样内联对一个近1百万的表频繁查询是不是太耗费资源了?
还有一个重要的问题 要怎么让那显示出来的3条记录不是固定的,比如总共有5条,我想让他随机的显示出3条
mysql能实现吗
再请教一下 这样内联对一个近1百万的表频繁查询是不是太耗费资源了?在chapterid、ID上建立索引,速度要好一点,在网络止是有点耗费资源还有一个重要的问题 要怎么让那显示出来的3条记录不是固定的,比如总共有5条,我想让他随机的显示出3条
mysql能实现吗这种要求只有用存储过程了
EN 我多加个条件就可以了
问下 在
SELECT * FROM test A LEFT JOIN
test B ON A.chaptername=B.chaptername AND A.id>=B.id
后面
加 and A.bookid=250 好
还是 where A.bookid=250哪个效率更高?
就是把那个ID字段的值随机生成?
那就是再select之前要写个更新语句把ID字段的值全部更新一遍还是……
全部更新一遍
是用个循环吧这样全部更新一遍再显示出来岂不是很慢你看这个页面
http://www.sodu.com.cn/mulu_2564.html
他的前5,6条记录是随机出现的 你觉得他是这样实现的吗
刚看到随机数可以用来排序ORDER BY RAND();
再次感谢!!
TRY1 B ON A.chapterid=B.chapterid AND A.ID>=B.ID and A.bookid=1
GROUP BY A.chapter,A.chapterid HAVING COUNT(*) <=3 ORDER BY A.chapterid,RAND()
SELECT * FROM test A LEFT JOIN
test B ON A.chaptername=B.chaptername AND A.id>=B.id AND A.bookid=250
GROUP BY A.chaptername,A.chapterurl HAVING COUNT(*) <=5
ORDER BY A.updatetime desc,RAND() limit 20执行了1个小时32分钟也没执行完 等不下去了,终止优化了一下,把要进行内联的表缩小(即用一个子查询代替)
SELECT * FROM (select * from test where bookid=250) A LEFT JOIN
(select * from test where bookid=250) B ON A.chaptername=B.chaptername AND A.id>=B.id
GROUP BY A.chaptername,A.chapterurl HAVING COUNT(*) <=5
ORDER BY A.chaptername,RAND() limit 20执行3秒,呜呜 快好多啊 再弄个索引 300多毫秒
呵呵 速度和带索引的 SELECT * FROM test where bookid=250 order by updatetime desc limit 20 差不多