MySql получить строки между значениями даты - PullRequest
0 голосов
/ 26 августа 2009

Я делаю следующий запрос и возвращаю все строки независимо от даты:

 SELECT DISTINCT p.name, p.category, u.f_name, t.name
 FROM   (
        prizes p, tags t, results r
        )
 LEFT JOIN
        users u
 ON     (r.user_id = u.id)
 LEFT JOIN
        f_tag_lookup tl
 ON     (tl.tag_id = t.id)
 WHERE  r.tag_id = t.id
        AND r.date BETWEEN concat(date_format(LAST_DAY(now() - interval 1 month), '%Y-%m-'),'01') AND last_day(NOW() - INTERVAL 1 MONTH)

r.date - поле даты и времени. есть три строки с датами из прошлого месяца и три строки с датами из этого месяца, но я получаю все строки обратно?

Буду признателен за любые указатели. Я хочу вернуть результаты между первым и последним днем ​​прошлого месяца, то есть все результаты за июль.

спасибо,

Ответы [ 2 ]

3 голосов
/ 26 августа 2009

Не могли бы вы просто использовать функцию даты month ()?

например. используйте месяц (дата) = месяц (сейчас ()) в качестве фильтра.

Вам также нужно будет сопоставить год (дата) = год (сейчас ()), если у вас были данные более чем за один год.

Я не уверен в производительности, но мне кажется более читабельным выразить это таким образом.

SELECT DISTINCT p.name, p.category, u.f_name, t.name
FROM (prizes p, tags t, results r)
LEFT JOIN users u ON (r.user_id = u.id)
LEFT JOIN f_tag_lookup tl ON (tl.tag_id = t.id)
WHERE r.tag_id = t.id AND 
      month(r.date) = month(now()) AND 
      year(r.date) = year(now()) 
0 голосов
/ 26 августа 2009

разобрался. SQL в отношении дат был в порядке, но соединения были неправильными. Спасибо за ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...