从另一个表上的 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 表中选择计数的主要内容,如果未能解决你的问题,请参考以下文章