2010-09-22 18 views
5

Por el momento tengo algo como esto ...¿Cuál es la mejor manera para seleccionar la semana en curso en MySQL

SELECT SUM(a.PaidSingle) AS PaidSingle, 
     DATE_FORMAT(a.TimeIn, '%a') AS weekDay 
FROM Attendance AS a JOIN MemberDetail AS m ON m.id = a.MemberID 
WHERE m.CardNumber = '$cardNo' 
AND WEEK(a.TimeIn, 0) = WEEK(NOW(),0) 
GROUP BY weekDay 
ORDER BY a.TimeIn 

Pero me di cuenta de que después de escribir que esto va a tomar las cosas de años anteriores como bien como el año actual.

Quería simplemente decir y año = este año, pero por supuesto, en una semana que comienza en diciembre y termina en enero, solo tendré media semana.

¿Cuál es la mejor manera de hacer esto en MySQL o debería usar una solución basada en PHP?

Respuesta

3

Usted está utilizando semana con el modo = 0, que devuelve los números de la semana de 0-53 - que conduce a un problema en torno a la nueva año, donde parte de la semana podría ser 'YYYY53' y el resto 'YYZZ00' si lo desea.

Si pudiera modo 2 que sería compatible con los DATE_FORMAT% V y X% opciones: utilizar

DATE_FORMAT(NOW(), "%X%V") 

Estos sólo los números de semana de uso de 1-53, por lo tanto, es posible obtener un evento de una semana YYYY53 para una fecha en el año YYYZ.

No cumple con su requisito de amabilidad me temo!

+0

Responde mi pregunta perfectamente, ¡gracias! Y es mucho mejor de lo que pensé que iba a tener que hacer. A punto de implementar y probar, pero al leer la REF de MySQL no puedo ver ningún problema. – Toby

+0

AÑOVEÑO (AHORA(), 2) He encontrado que también produce el mismo efecto. – Toby

0

por qué no seleccionar el día de la semana:

SELET DATE_FORMAT(NOW(), '%u') 

como se describe here

+0

Porque esto todavía fallará si tengo el lunes 15 de septiembre de 2010 y el lunes 15 de septiembre de 2009 (o lo que sea que el lunes de esa semana caiga en esos años) – Toby

+0

puede agregar fácilmente el año como dice el enlace, es por eso que lo enlazó –

Cuestiones relacionadas