从另一个表上的 Where 表中选择计数

Posted

技术标签:

【中文标题】从另一个表上的 Where 表中选择计数【英文标题】:Select count from a table with a Where on another table 【发布时间】:2015-04-10 11:09:41 【问题描述】:

我有两张桌子

oc2_visits(字段:id_ad) oc2_ads(字段:已发布)

我需要通过对 id_ad 进行分组来计算访问次数,这很有效,但我还需要前 9 个结果在 25 天前发布。

这是我目前的查询:

SELECT count(v.id_ad) AS visits,
       v.id_ad,
       a.published
FROM oc2_visits AS v,
     oc2_ads AS a
WHERE DATE(a.published) >= DATE_SUB(NOW(), INTERVAL 25 DAY)
GROUP BY v.id_ad
ORDER BY visits DESC LIMIT 0,9

但是当我尝试在 phpmyadmin 中输入查询时,它崩溃了。

我做错了什么?

【问题讨论】:

它是否显示任何错误? 【参考方案1】:

我认为您在与 DATE 进行比较时忘记将 DATE_SUB(NOW(), INTERVAL 25 DAY) 解析为 DATE。希望它会工作。

SELECT count(v.id_ad) AS visits,
       v.id_ad,
       a.published
FROM oc2_visits AS v,
     oc2_ads AS a
WHERE DATE(a.published) >= DATE(DATE_SUB(NOW(), INTERVAL 25 DAY))
GROUP BY v.id_ad
ORDER BY visits DESC LIMIT 0,9

【讨论】:

感谢您的快速回复 adarsh,问题仍然存在,phpmyadmin 崩溃,日期似乎在其他查询中仍然有效。 那么可能是其他问题。(例如:内存不足或一些配置问题) 我不这么认为,所有其他查询都有效,而且我在一个很好的专用服务器上。【参考方案2】:

您的问题的根源大概是两个表之间的笛卡尔积。简单规则:切勿在 from 子句中使用逗号。始终使用明确的join 语法。

我想你想要的查询看起来像这样:

SELECT count(v.id_ad) AS visits, v.id_ad, a.published
FROM oc2_visits v join
     oc2_ads a
     ON v.id_ad = a.id_ad
WHERE DATE(a.published) >= DATE_SUB(NOW(), INTERVAL 25 DAY)
GROUP BY v.id_ad
ORDER BY visits DESC
LIMIT 0, 9;

【讨论】:

以上是关于从另一个表上的 Where 表中选择计数的主要内容,如果未能解决你的问题,请参考以下文章

从另一个表中选择 * 以及计数/总和

从另一个表中选择具有数据计数的数据[重复]

Oracle SQL:从一个表中选择一个计数,从另一个表中使用子查询缩小选择范围

sql - 左连接 - 计数

MySQL:从另一个表中的值“修补”表上的现有数据

如何从另一个表中获取每个值的计数?