Requete avec DATE_SUB / INTERVAL et champ dynamique
Bonjour à tous,
Je suis actuellement en train de refaire un script SQL qui avait été fait par une autre personne à la base.
La requête SQL était telle que :
requete 1
Code:
1 2 3 4 5 6
| EXPLAIN SELECT champ1, COUNT(champ2) AS champ2
FROM matable t1
WHERE t1.STATUS='1'
AND t1.DateGMT > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))
AND t1.IDPAY != 9
GROUP BY t1.champ1; |
Or aujourd'hui nous souhaitons que la valeur de l'intervalle soit récupéré depuis une autre table et non plus en dur. Appellons cet intervalle champ_interval. Je l'ai donc stocké dans une autre table et ce champ est de type tinyint(1) UNSIGNED default 1.
J'ai transformé la requête SQL de la manière suivante:
Requete 2
Code:
1 2 3 4 5 6 7
| EXPLAIN SELECT champ1, COUNT(champ2) AS champ2
FROM matable1 t1
INNER JOIN matable2 AS t2 ON (t2.champ3 = t1.champ3)
WHERE t1.STATUS='1'
AND t1.DateGMT > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL champ_interval DAY))
AND t1.IDPAY != 9
GROUP BY t1.champ1; |
Et c'est là que je rencontre un problème :(
En effet si je retourne le resultat des 2 explain j'ai ceci
Requete 1 : key DateGMT / rows 1249
Requete 2 : key Status / rows 2042725
Et dans le second cas la requête ramène beaucoup beaucoup trop d'enregistrements.
Je dois préciser que si je prend la même requete 2 et que je met 1 en dur à la place de champ_interval alors le nombre de lignes est correct. C'est dès que je met champ_interval que cela ne va plus.
J'ai essayé de forcer l'index, de caster le champ, de ne plus passer par DATE_SUBS et INTERVAL ... rien n'y fait.
Est ce que quelqu'un aurait une idée svp ?
Ou est ce que je dois faire un script PHP plutot que full SQL parce que ce que je tente de faire n'est pas possible ?
Merci de votre aide car là j'avoue je suis un perdue :)