Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1116 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  si la valeur d'une variable existe deja

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

si la valeur d'une variable existe deja

n°1304037
attentio
Posté le 13-02-2006 à 09:58:29  profilanswer
 

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

Code :
  1. <? echo'<table>';
  2. while( $resultat_date = mysql_fetch_array($req_date)){
  3. $_SESSION['le_moi']=$le_moi;
  4. $le_moi=$resultat_date['date']);
  5. if($_SESSION['le_moi']!=$le_moi){
  6. echo '<tr><td>'.$le_moi.'</td></tr>';
  7. }
  8. echo'</table>'; ?>


alors ya t'il une solution sans passer par les variables de session? ...
merci de votre aide

mood
Publicité
Posté le 13-02-2006 à 09:58:29  profilanswer
 

n°1304090
sielfried
Posté le 13-02-2006 à 10:36:08  profilanswer
 

select enreg, date  
from table
group by date
order by date


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1304100
skeye
Posté le 13-02-2006 à 10:41:09  profilanswer
 

euh.
select distinct, plutôt qu'un group by, c'est fait pour.[:dawao]


---------------
Can't buy what I want because it's free -
n°1304106
sielfried
Posté le 13-02-2006 à 10:42:37  profilanswer
 

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.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1304113
skeye
Posté le 13-02-2006 à 10:47:13  profilanswer
 

ah oui, tiens, j'avais pas tout lu.[:chrisbk]
M'enfin un truc comme tu fais c'est pas valide sous oracle, par exemple...il  se paierait un  

Citation :

enreg
*
ERREUR à la ligne 1 :
ORA-00979: not a GROUP BY expression


---------------
Can't buy what I want because it's free -
n°1304115
sielfried
Posté le 13-02-2006 à 10:49:31  profilanswer
 

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.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1304118
skeye
Posté le 13-02-2006 à 10:50:12  profilanswer
 

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 :
  1. SELECT t1.enreg, t1.date
  2. FROM matable t1
  3. WHERE NOT EXISTS (
  4.  SELECT 1 FROM matable t2
  5.  WHERE t1.date = t2.date
  6.  AND t2.enreg < t1.enreg)


---------------
Can't buy what I want because it's free -
n°1304120
skeye
Posté le 13-02-2006 à 10:51:02  profilanswer
 

(ce qui est plus propre, et doit fonctionner partout.:o)


---------------
Can't buy what I want because it's free -
n°1304134
sielfried
Posté le 13-02-2006 à 11:06:52  profilanswer
 

Ou encore
 

Code :
  1. SELECT t1.enreg, t1.date
  2. FROM matable t1
  3. WHERE t1.enreg = (
  4.   SELECT min(t2.enreg)
  5.   FROM matable t2
  6.   WHERE t2.date = t1.date
  7. )


 
Evidemment faut dans les deux cas qu'"enreg" soit numérique.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1304136
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-02-2006 à 11:08:03  profilanswer
 

mais juste en prenant le min ça marcherait pas?

Code :
  1. SELECT min(enreg), date  
  2. FROM TABLE
  3. GROUP BY date
  4. ORDER BY date


ce qui doit fonctionner partout et evite la sous-requete dans le exists

Message cité 1 fois
Message édité par anapajari le 13-02-2006 à 11:08:31
mood
Publicité
Posté le 13-02-2006 à 11:08:03  profilanswer
 

n°1304141
skeye
Posté le 13-02-2006 à 11:11:08  profilanswer
 

anapajari a écrit :

mais juste en prenant le min ça marcherait pas?

Code :
  1. SELECT min(enreg), date  
  2. FROM TABLE
  3. GROUP BY date
  4. ORDER BY date


ce qui doit fonctionner partout et evite la sous-requete dans le exists


 
euh oui, quitte à ne pas avoir le cerveau trop dans la brume, autant se servir du min correctement jusqu'au bout! [:rofl]
 
Bon après ma version a l'avantage de permettre des méthodes de tri plus complexes... :whistle:
...et de toute manière le sgbd exécute probablement exactement la même chose dans les 2 cas, au final...[:god]


---------------
Can't buy what I want because it's free -
n°1304146
sielfried
Posté le 13-02-2006 à 11:16:37  profilanswer
 

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.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1304170
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-02-2006 à 11:37:31  profilanswer
 

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.
 
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.


ça marche aussi min sur des strings .. et tu auras bien "enreg1" < "enreg2".
Il faut juste eventuellement faire attention à la casse des mots.

n°1304191
sielfried
Posté le 13-02-2006 à 12:00:01  profilanswer
 

anapajari a écrit :

ça marche aussi min sur des strings .. et tu auras bien "enreg1" < "enreg2".


 
Pas sur mon MySQL local... [:spamafote]  
 
Ca me renvoie un tuple vide.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1304196
anapajari
s/travail/glanding on hfr/gs;
Posté le 13-02-2006 à 12:08:09  profilanswer
 

From the doc

Citation :


MIN(expr), MAX(expr)
 
Returns the minimum or maximum value of expr. MIN() and MAX() may take a string argument; in such cases they return the minimum or maximum string value. See Section 7.4.5, “How MySQL Uses Indexes”.  


[:spamafote]

n°1304203
sielfried
Posté le 13-02-2006 à 12:13:05  profilanswer
 

Pfff, ok au temps moi, forcément je testais sur une table qui peut contenir une chaîne vide... c'est malin. [:pingouino]
 


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  si la valeur d'une variable existe deja

 

Sujets relatifs
[JS] Variable dans le nom d'un objet...matlab_renommer une variable
Variables pointant vers la même valeurLire des valeur sur le smbus?
test numerique d'une variable en csh[VBA] Passer une variable d'un userform à un autre
[PHP] vérifier le contenu d'une variablevariable qui suit après une redirection de page
xsl:variable et xsl:call-templatevariable $_POST[""]) dans traitement de formulaire
Plus de sujets relatifs à : si la valeur d'une variable existe deja


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR