si la valeur d'une variable existe deja - PHP - Programmation
Marsh Posté le 13-02-2006 à 10:36:08
select enreg, date
from table
group by date
order by date
Marsh Posté le 13-02-2006 à 10:41:09
euh.
select distinct, plutôt qu'un group by, c'est fait pour.
Marsh Posté le 13-02-2006 à 10:42:37
Avec distinct ça va lui prendre à la fois "enreg1| 2006-02-12" et "enreg2| 2006-02-12" a priori, c'est sur tout le tuple.
Sauf s'il sélectionne que les dates, mais je vois pas l'intérêt.
Marsh Posté le 13-02-2006 à 10:47:13
ah oui, tiens, j'avais pas tout lu.
M'enfin un truc comme tu fais c'est pas valide sous oracle, par exemple...il se paierait un
Citation : enreg |
Marsh Posté le 13-02-2006 à 10:49:31
Ouais, c'est une sorte d'astuce qu'il m'arrive d'utiliser sous mysql, mais il est clair que group by est pas vraiment fait pour ça.
N'empêche que pour le coup, c'est utile.
Marsh Posté le 13-02-2006 à 10:50:12
une autre solution, c'est de sélectionner tous les enregistrements tels qu'il n'existe pas d'enregistrement ayant à la fois la même date et un n° d'enregistrement inférieur :
Code :
|
Marsh Posté le 13-02-2006 à 10:51:02
(ce qui est plus propre, et doit fonctionner partout.:o)
Marsh Posté le 13-02-2006 à 11:06:52
Ou encore
Code :
|
Evidemment faut dans les deux cas qu'"enreg" soit numérique.
Marsh Posté le 13-02-2006 à 11:08:03
mais juste en prenant le min ça marcherait pas?
Code :
|
ce qui doit fonctionner partout et evite la sous-requete dans le exists
Marsh Posté le 13-02-2006 à 11:11:08
anapajari a écrit : mais juste en prenant le min ça marcherait pas?
|
euh oui, quitte à ne pas avoir le cerveau trop dans la brume, autant se servir du min correctement jusqu'au bout!
Bon après ma version a l'avantage de permettre des méthodes de tri plus complexes...
...et de toute manière le sgbd exécute probablement exactement la même chose dans les 2 cas, au final...
Marsh Posté le 13-02-2006 à 11:16:37
J'avais pas mis min() au début parce que j'pensais qu'enregistrement était de la forme "enreg1", "enreg2" et pas un nombre... évidemment si c'est du numérique, min() et basta.
Mais si c'est une chaîne de caractère de ce genre (ce qui serait stupide ceci dit), y'a a priori seulement ce que j'avais mis et la solution de skeye (le "<" agissant comme comparateur lexicographique) qui passeraient.
Marsh Posté le 13-02-2006 à 11:37:31
sielfried a écrit : J'avais pas mis min() au début parce que j'pensais qu'enregistrement était de la forme "enreg1", "enreg2" et pas un nombre... évidemment si c'est du numérique, min() et basta. |
ça marche aussi min sur des strings .. et tu auras bien "enreg1" < "enreg2".
Il faut juste eventuellement faire attention à la casse des mots.
Marsh Posté le 13-02-2006 à 12:00:01
anapajari a écrit : ça marche aussi min sur des strings .. et tu auras bien "enreg1" < "enreg2". |
Pas sur mon MySQL local...
Ca me renvoie un tuple vide.
Marsh Posté le 13-02-2006 à 12:08:09
Citation : |
Marsh Posté le 13-02-2006 à 12:13:05
Pfff, ok au temps moi, forcément je testais sur une table qui peut contenir une chaîne vide... c'est malin.
Marsh Posté le 13-02-2006 à 09:58:29
bonjour,
je cherche une solution pour afficher un enregistrement uniquement si l'une des valeurs n'a pas encore été declaré.
exemple:
si mes enregistrements sont:
enreg1| 2006-02-12
enreg2| 2006-02-12
enreg3| 2006-02-13
alors on affiche uniquement :
enreg1| 2006-02-12
enreg3| 2006-02-13
etant donné que la date etait la meme sur enreg 1 et 2
j'aibien trouvé une solution pour faire ce que je veux, mais je passe par les variables de session
alors ya t'il une solution sans passer par les variables de session? ...
merci de votre aide