分表之后,按照时间排序获得数据有没有好的方式

有三张表:

用户表:user——————-user_id


文章表:article—————-article_id,user_id;


评论表:article_comment—-comment_id,article_id


user表对article_comment表是一对多对多的关系。

现在对article_comment进行分表,按照article_id%6分为article_comment_0/1/2/3/4/5六张表,
现在需要根据评论的时间来展示某一个用户的所有文章的评论,sql该怎么写呢?

经过2天的讨论,我们决定分表结构不变,article_comment(评论)表按照article_id取余进行分表,后台评论管理的时候,按照时间进行分页,(最近一天,最近两天,最近五天。。。参考微信公众平台的评论管理),将时间作为限制条件查询所有评论表:


sql:SELECT * FROM article_comment_0/1/2.. where create_time > time()-24*3600


之后代码进行排序,显示到前端页面。
如果想管理所有评论只能依据某一篇文章进行管理。
以上。

你这样的分表根据你的业务避免不了的,UNION肯定要使用
优化一:你在article_comment表最好冗余uid字段,减少表连接查询
优化二:再建个评论索引表,就存uid,articleId,评论时间,评论id四个字段,后面可以根据具体业务再新增字段,但不要太多了,这是张全局的用户评论关系表,是张单表,加好索引这张表放几千万不成问题
在优化二中你可以通过时间查询用户的articleId,评论id字段再去相应的分表中查询,直接用in (评论id),效率要比你的写法高

一般用elasticsearch来实现

SELECT * FROM((SELECT * FROM article_comment_0 INNER JOIN article ON article_comment_0.article_id=article.article_id WHERE article.user_id='userid') UNION
(SELECT * FROM article_comment_1 INNER JOIN article ON article_comment_1.article_id=article.article_id WHERE article.user_id='userid') UNION
(SELECT * FROM article_comment_2 INNER JOIN article ON article_comment_2.article_id=article.article_id WHERE article.user_id='userid') UNION
(SELECT * FROM article_comment_3 INNER JOIN article ON article_comment_3.article_id=article.article_id WHERE article.user_id='userid') UNION
(SELECT * FROM article_comment_4 INNER JOIN article ON article_comment_4.article_id=article.article_id WHERE article.user_id='userid') UNION
(SELECT * FROM article_comment_5 INNER JOIN article ON article_comment_5.article_id=article.article_id WHERE article.user_id='userid')) res
ORDER BY res.comment_createtime DESC

你的表这样子设计就要每次都去联结article查询,所以建议在common表中冗余一个user_id字段,这样查询就不用多一步操作

能不分表就不分表,分表会给开发带来很大麻烦,你可以用分区,mysql不太懂,但是我搜到这个:

http://dev.mysql.com/doc/refm

应该按照你查询条件进行分表,不然没有好办法

  • PHPUnit 运行找不到 PHPUnit_Framework_TestCase?
  • 后台php返回json,本地测试中文显示正常,服务器中文变成问号。
  • Nginx log如何记录用户信息
  • 该选择哪个语言开发爬虫?
  • 如何根据数据库中的某一个字段查询其在表中相同值所对应的另外一个字段的和?
  • Yii中为什么继承了CFormModel还是可以调用SAVE方法?
  • PHP程序,如何自动化测试在各个PHP版本(5.3/5.4/5.5..),以及各个浏览器下能否正常工作?
  • laravel 文件系统怎么创建软连接
  • PHP如何执行定时任务?
  • php二分法
  • /public_html/var/HyperDown.php on line 284