【问题标题】:Quering one table and ordering by occurences from another查询一张表并按另一张表的出现次数排序
【发布时间】:2011-07-01 03:26:17
【问题描述】:

我需要从“cmets”列表中选择我所有的 cmets。问题是,每条评论都会收到多个“赞”,这些“赞”存储在“赞”表中。

我想从 'cmets' 表中选择所有项目,但是当每个 'like' 表示为 'likes' 表中的一行时,按喜欢的数量排序...

有没有人知道这样做的好方法? 非常感谢, 亚尼潘 ** 编辑 ** 你好, 你是对的,对不起。 我使用 php 作为我的服务器端,并使用 MySql 作为我的数据库...... 我忘记了这个论坛上提出的问题范围有多广......

【问题讨论】:

  • 您已经成功地提出了问题并对其进行了标记,而没有提及涉及哪些技术,或者您正在编写查询的层级。是否涉及 ORM?还是纯粹在 SQL 中。如果是 SQL,哪个服务器?
  • 嗨,你是对的,对不起。我使用 php 作为服务器端,MySql 作为我的数据库...我忘记了这个论坛上提出的问题范围有多大...
  • 您可以使用 joins ,但如果您不让我们确切知道 to 表的 create table 语句,我们将无法为您提供太多帮助。此外,您可以在所有数据库管理员常去的 dba.stackexchange.com 上提出这个问题,以便您在那里得到更好的答案。

标签: php mysql sorting grouping


【解决方案1】:

获取 10 个最喜欢的 cmets,包括那些根本没有任何喜欢的 cmets(左连接)(假设有两个表的简单结构: cmets 和 likes):

select c.*,count(l.id) as likes
  from comments c 
    left join likes l on c.id = l.comment 
  group by l.comment
  order by count(l.id) desc 
  limit 10;

请注意,此查询的性能会非常糟糕。因此,您很可能必须找到另一种策略来按喜欢的数量对您的 cmets 进行排序。

【讨论】:

  • 谢谢,它确实有效。至于您的建议,当有投票时,我确实确实对 cme​​ts 表进行了更新查询,因此每条评论都有所有投票的总和。这意味着每次投票都要进行一次查询,但至少可以节省时间和以后的 cpu...感谢您的建议!
  • @yanipan,因为您是新来的:您应该接受对您的问题的正确答案:“当您确定哪个答案对您最有帮助时,通过单击检查将其标记为已接受的答案答案左侧的方框轮廓。这让其他人知道您的问题得到了很好的回答。这样做很有帮助,因为它向其他人表明您从社区中获得了价值。(如果您没有这样做,人们通常会礼貌地要求您返回并接受更多问题的答案!)”stackoverflow.com/faq#howtoask
猜你喜欢
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 2016-09-25
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多