【问题标题】:Select count from a table with a Where on another table从另一个表上的 Where 表中选择计数
【发布时间】: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 中输入查询时,它崩溃了。

我做错了什么?

【问题讨论】:

  • 它是否显示任何错误?

标签: php mysql sql join 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 2019-06-20
    • 2018-03-09
    • 2013-07-17
    • 1970-01-01
    • 2020-06-19
    • 2011-08-23
    • 2019-11-20
    相关资源
    最近更新 更多