简体   繁体   中英

Select count from a table with a Where on another table

I have two tables

  • oc2_visits (fields: id_ad)
  • oc2_ads (fields: published)

I need to count the visits by grouping the id_ad, and that works, but I need also that the first 9 results have been published not more that 25 days ago.

This is the query I have at the moment:

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

but when I try to enter the query in phpmyadmin, it crashes.

What am I doing wrong?

Presumably the root of your problem is the cartesian product between two tables. Simple rule: Never use comma in the from clause. Always use explicit join syntax.

I imagine the query you want looks something like this:

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;

I think you forgot to parse DATE_SUB(NOW(), INTERVAL 25 DAY) into DATE while comparing with a DATE. Hope it'll work.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM