Maison > base de données > tutoriel mysql > le corps du texte

mysql 怎么实现随机查询并分页,不重复查询

WBOY
Libérer: 2016-06-07 16:14:43
original
6703 Les gens l'ont consulté

需求: 企业应用中,一般数据量不是很特别多,同时大多在局域网内,性能不会有问题,一般不会分页处理,随机排序数据一般不会有问题 web网站中,一般都用到分页处理,目前数据量比较少,考虑到数据动态,想随机顺序展现数据(每次看到的不一样) 方案: 数据

需求:

 

  1. 企业应用中,一般数据量不是很特别多,同时大多在局域网内,性能不会有问题,一般不会分页处理,随机排序数据一般不会有问题
  2. web网站中,一般都用到分页处理,目前数据量比较少,考虑到数据“动态”,想随机顺序展现数据(每次看到的不一样)

方案:

 

  1. 数据库解决:
  • 用mysql的select * from tab order by rand()
  • 用rand()会用问题,会出现数据重复:从数据库的rand()和分页原理上,出现重复不可避免(分页其实对sql语句结果的分段提取,对结果集从第m条记录到第n条记录;mysql的rand()实现原理是每次sql的结果集的全部按算法打乱排序;而分页是有上下文关系的,所以可能出现某条记录出现在不同的分页中,如某条记录在第一次sql执行时,rand()排序后,在第一页,而第二次执行sql时,rand()排序后,落在第二页,这条记录在分页过程中,用了多次)
  • 在可以容忍重复的情况下可以用,不过mysql的rand()函数效率非常低,建议用表中的主键做散列计算排序(如主键是数字类型,可求余运算来散列)
  • 如不能容忍重复,数据库好像比较难直接解决(网站web应用又没有固定的连接,利用session id标识,建立临时表?好像不大现实)
  1. 程序解决:
  • 第一页时,取到内存,然后翻页时,用剩余数据,比较复杂,也不大现实(标识session id,何时清理...?)

结论:

  1. 好像解决不了,有无其它方案?
  2. 目前网站 http://www.xxxxxxxxinebornchina.cn 采用3分钟之内改变一次,不过在临界点时间,也可能出现数据重复(瀑布流方式翻页展示时,最终回全部查出)

 

 

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!