Doublons et attribut par defaut

Résolu
rafou777 Messages postés 11 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 23 janvier 2007 - 23 janv. 2007 à 13:34
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 - 24 janv. 2007 à 15:02
Bonjour, un petit probleme

J'ai une table avec quatre champs (id,date1,date2,date3) j'enregistre mes date dans mysql au format date 0000-00-00

j'aimerai que ma requete retourne toute les  dates des champs date1,date2 et date3 sans doublons et sans les attributs par defaut(0000-00-00)

je fais ceci mais ça ne marche pas, ça m'affiche tj les doublons et les attributs par defaut dans une liste déroulante :

$req1 = mysql_query("select * from voyage where voyage.id GROUP BY date1,date2,date3,date4,date5,date6");




    
   
 while($ligne = mysql_fetch_array($req1))
   {
    $id = $ligne ["id"];
   $d1 = $ligne ["date1"];
   $d2 = $ligne ["date2"];
    $d3 = $ligne ["date3"];
     $d4 = $ligne ["date4"];
   $d5 = $ligne ["date5"];
    $d6 = $ligne ["date6"];

Merci beaucoup

16 réponses

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
24 janv. 2007 à 15:02
Mais tu peux faire autant de requète que tu veux dans une même page !!!

Si tu veux faire 10 SELECT, 3 INSERT, 6 UPDATE et 40 DELETE, tu peux le faire !
Y'a aucune restriction !!

Ce que tu vas faire :
 --> première query, tu insère ton nouveau voyage dans ta table "voyage".
 ----> tu récupères le numéro d'ID du voyage (via mysql_insert_id())
--> tu fais ta deuxième query, tu fais autant d'insertion que tu possèdes de date dans ta table "date_par_voyage".

Je pensais pas que faire de l'insertion de donnée était si compliqué ;)
3
cs_Springer Messages postés 85 Date d'inscription lundi 14 juillet 2003 Statut Membre Dernière intervention 14 mars 2007 1
23 janv. 2007 à 14:19
bonjour,
je te propose d'aller faire un tour de ce coté :
http://sqlpro.developpez.com/cours/doublons/
cordialement
0
rafou777 Messages postés 11 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 23 janvier 2007
23 janv. 2007 à 15:07
Merci pour ta réponse j'ai essayé ce qu'ils proposaient sur le site mais rien ne me semble convenir...

je me suis peut-etre mal expiqué, ce que j'aimerai ce n'est pas de supprimer les doublons dans ma base mais de ne pas les afficher dans le while.

sur mon site j'ai une liste déroulante qui me donne toute les dates enregistré dans date1,date2,date3 et date4 mais celle-ci m'affiche des doublons par ex si 2007-01-01 est dans date1 et date2 il me l'affiche deux fois dans cette liste mais aussi les attributs par défaut çàd que si il n'y a pas d'enregistrement la date est par défaut 0000-00-00 et il me l'affiche aussi.
0
cs_Springer Messages postés 85 Date d'inscription lundi 14 juillet 2003 Statut Membre Dernière intervention 14 mars 2007 1
23 janv. 2007 à 15:22
essaye la clause HAVING après le GROUP BY
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Springer Messages postés 85 Date d'inscription lundi 14 juillet 2003 Statut Membre Dernière intervention 14 mars 2007 1
23 janv. 2007 à 15:35
re,


pour les doublons utilise la clause "distinct" ou "distinctrow" avant le champ
0
rafou777 Messages postés 11 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 23 janvier 2007
23 janv. 2007 à 15:43
HAVING ne me sert pas à grand chose, je ne veux pas faire un calcule sur mes dates, je veux juste que les doublons et les attributs par défaut des champs DATE ne (s'affiche pas) merci quand meme.

J'ai essayé DISCTINCT mais ça ne marche que pour un seul champ pas plusieurs.
0
cs_Springer Messages postés 85 Date d'inscription lundi 14 juillet 2003 Statut Membre Dernière intervention 14 mars 2007 1
23 janv. 2007 à 15:55
re et der je pense,

$n = 1; //initialisation de l'incrément

 while($ligne = mysql_fetch_array($req1))
   {
      if($ligne ["date.$n"] != "0000-00-00" && $n < 7)
         {
            $id = $ligne ["id"];
            $d.$n = $ligne ["date.$n"];
         }
   $n++;
   }
puis après dans une boucle tu affiches $d.$n si il existe.
je pense que celà résoudra ton problème
0
cs_Springer Messages postés 85 Date d'inscription lundi 14 juillet 2003 Statut Membre Dernière intervention 14 mars 2007 1
23 janv. 2007 à 16:05
pardon encore moi
pour éliminer les doublons avant la date par défaut je pense qu'il faut rédiger ta requète ainsi :
$req1 = mysql_query("select date1,date2,date3,date4,date5,date6 from voyage where voyage.id GROUP BY date1,date2,date3,date4,date5,date6");
0
cs_Springer Messages postés 85 Date d'inscription lundi 14 juillet 2003 Statut Membre Dernière intervention 14 mars 2007 1
23 janv. 2007 à 16:21
et re


et pour les doublons en php il existe cette fonction : "array_unique", donc la fonction de tri avec suppression de la valeur par défaut devient :


$n = 1; //initialisation de l'incrément
$ligne = mysql_fetch_array($req1);
$neue_ligne = array_unique($ligne);//array_unique retourne un tableau sans les doublons

 while(!empty($neue_ligne))
   {
      if($ligne ["date.$n"] != "0000-00-00" && $n < 7)
         {
            $id = $ligne ["id"];
            $d.$n = $ligne ["date.$n"];
         }
   $n++;
   }
0
rafou777 Messages postés 11 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 23 janvier 2007
23 janv. 2007 à 17:16
re ton code me réenvoit tous les champs dates avec doublons, attributs par defaut et l'infini, j'ai fait sauté les memory_limit et max_execution_time de mon hébergeur 
0
rafou777 Messages postés 11 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 23 janvier 2007
23 janv. 2007 à 18:16
je deviens fou ça fait 2 jours que je suis là dessus, je suis sur que c'est un truc simple mais je passe à coté de la plaque, je veux juste  mettre toute les valeurs de 6 champs et les afficher dans une liste déroulante sans doublons et sans les attributs par défaut(0000-00-00), Help plz
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
23 janv. 2007 à 23:11
$req1 = mysql_query("select * from voyage where voyage.id GROUP BY date1,date2,date3,date4,date5,date6");

Mauvaise conception de ta base de donnée à l'origine.
Voila pourquoi tu possèdes ce problème.

Dans une base de donnée, tu as des champs "dateN" (soit date1, date2, date3.... date6).
Hors, tu ne peux pas faire un truc comme ca. C'est abérant de voir un truc pareil, tu aurais 20 dates, tu marques les 20 dates dans des champs ?
Non, il faut revoir ta base de donnée.

table voyage :
id INT(11) NOT NULL AUTOINCREMENT
autrechamp VARCHAR(255)
// etc...

table date_de_voyage :
id INT(11) NOT NULL AUTOINCREMENT
id_voyage INT(11) NOT NULL
date DATETIME()

Avec une contrainte entre date_de_voyage.id_voyage et voyage.id

Après, et seulement après tu fais ta requète avec une jointure en utilisant un DISTINCT. Tu vas voir comme par magie que ca fonctionne comme tu le souhaites.

Tu as fait une mauvaise analyse de ta BDD dès le début, normal que tu te prennes la tête pour rien.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
23 janv. 2007 à 23:14
J'ai oublié un exemple de ta table date_de_voyage

id | id_voyage | date
1 |    10          | dd:mm:yyyy h:i:s
2 |    10          | dd:mm:yyyy h:i:s
3 |    11          | dd:mm:yyyy h:i:s

etc...

Tu vas me dire que tu n'as besoin que de 6 dates... à toi de t'arranger avec PHP pour éviter de pouvoir rajouter une 7ème date.

Je te laisse le soin de la requète avec la jointure :)
0
rafou77 Messages postés 65 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 7 février 2007
24 janv. 2007 à 00:14
encore merci pour ta patience, je susi autodidact en progammation et cela fait longtemps que je n'ai plus fait de php.

J'ai bien pensé à ce que tu me propose mais si je refais une table date_de_voyage avec les dates lié par la contrainte date_de_voyage.id_voyage et voyage.id je n'arriverai pas à faire l'enregistrement ou l'update dasn ma partie administration.

je m'explique c'est un site de proposant des voyages et certain voayages ont plus d'une date de départ ( une , deux ou plus max 6)  j'ai une page dans ma partie admin pour ajouter des voyages avec 6 listes déroulante pour les dates et une autre page pour l'update avec les 6 listes déroulante.

donc si je n'ai qu'une seule page pour l'ajout de nouveaux voyages je ne vois pas comment voyage.id et date_de_voyage.id_voyage  pourraient avoir la meme valeur. c'est pour ça que j'ai été contrain de faire comme ça, en fait il faudrait d'abort que j'enregistre dans ma table voyage et seulement après enregistrer dans date_de_voyage mais le prob c'est que je dois tout faire sur la meme page d'ajout.

Merci
  
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
24 janv. 2007 à 00:55
"je n'arriverai pas à faire l'enregistrement ou l'update dasn ma partie administration." ? pourquoi ?
Moi j'y arrive très bien pourtant :o

"je ne vois pas comment voyage.id et date_de_voyage.id_voyage  pourraient avoir la meme valeur." C'est la meme chose. C'est ce qui va lier tes dates à tes numéros de voyages !

"en fait il faudrait d'abort que j'enregistre dans ma table voyage et
seulement après enregistrer dans date_de_voyage mais le prob c'est que
je dois tout faire sur la meme page d'ajout." Si tu fais 2 requètes, ta première sera sur la table voyage, et la seconde sur tes table de date.
En réalité, tu vas faire autant d'insert que de date pour ton voyage.

C'est simple :)
0
rafou77 Messages postés 65 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 7 février 2007
24 janv. 2007 à 01:09
j'abuse je sais

mais le prob c'est que je ne saurai pas faire d'insert sur les deux table d'un coup en une seule page puis qu'il faut d'abort que voyage.id s'incrémente et ensuite sur une deuxieme page en récupérant la valeur de la clé primaire voyage.id pour l'inserer dans date_de_voyage.id_voyage et la la liaison sera faite, je me trompe ou je dois bien faire comme ça? çàd deux pages
0
Rejoignez-nous