Page 1 sur 1

Résolu:Aide SQL Select

Posté : 16 sept. 2011, 11:31
par hashut
Salut all

j'ai petit problème

j'ai une table User et une table Fiche Observation les utilisateur remplisse la fiche autant de fois qu'il veulent.
donc un utilisateur peu avoir plusieurs fiches.
je doit recupere les mail des user qui on remplie une fiche
mon problème comment faire pour que email d'un user qui as remplie plusieurs fiche n'aparesse qu'une seul fois
pour info je export sa en fishier excel

Code : Tout sélectionner

include('../conf/conf.php'); @mysql_connect($serveur,$user,$passw) or die("Impossible de se connecter à la base de données"); @mysql_select_db("$bd_base") or die("Impossible de se connecter à la base de données"); $query = "select id_user from fiche"; $result = mysql_query($query); $nb = mysql_numrows($result); $i=0; while ($i < $nb){ $id_user = mysql_result($result,$i,"id_user"); $date = date('j_m_Y'); header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=email-observateur_$date.xls"); include('../conf/conf.php'); $bdd = mysql_connect($serveur,$user,$passw); mysql_select_db((observatoiremigrateurs),$bdd); $requete=@mysql_query("SELECT prenom,nom,email FROM user where id='$id_user'"); if (@mysql_numrows($requete) ==0) { print "<script> alert('La requ&egrave;te n\'a pas abouti !')</script>"; } print '<table border=1> <TR><TD><b>Prénom</b></TD><TD><b>Nom</b></TD><TD><b>Email</b></TD></TR><TR>'; for ($ligne=0 ; $ligne<@mysql_numrows($requete);$ligne++) { for ($colonne = 0;$colonne < 3 ; $colonne++) { print '<TD>' .mysql_result($requete , $ligne,$colonne). '</TD>'; } print '</TR>'; } print '</TABLE>'; mysql_close(); $i++; }
un peu aide me faire du bien merci

Re: Aide SQL Select

Posté : 16 sept. 2011, 11:44
par xTG
Regardes du côté de l'instruction SQL : GROUP BY

Re: Aide SQL Select

Posté : 16 sept. 2011, 11:49
par macgawel
Bonjour.

Tu as deux solutions :

1. En PHP.
http://fr.php.net/manual/fr/function.ar ... y_unique()...

2. (Plus efficace) en SQL, voir l'instruction DISTINCT...

Re: Aide SQL Select

Posté : 16 sept. 2011, 12:05
par hashut
cela fonction pas

$requete=@mysql_query("SELECT DISTINCT prenom,nom,email FROM user where id='$id_user'");

il affiche toutes les donner donc user qui remplisse plusieurs fois la fiche leur mail et affiche plusieurs fois

Re: Aide SQL Select

Posté : 16 sept. 2011, 12:23
par moogli
group by ?

@+

Re: Aide SQL Select

Posté : 16 sept. 2011, 14:12
par Ryle
L'instruction group by ne doit être utilisée que lorsque la requête fait appel a au moins une fonction de groupe (count, avg, sum, min, ...), ce qui n'est pas le cas ici.

L'instruction distinct va quant à elle supprimer les doublons dans les enregistrements retournés. Cependant si tu récupères plusieurs champs (nom, prénom et email), distinct ne supprimera les doublons que si tous les champs sont scrupuleusement identiques (puisque dans le cas contraire, ce n'est plus un résultat en doublon, même si certains champs auront les mêmes valeurs).

Par contre je ne comprends pas bien ton besoin.. Si un utilisateur répond une fois sur la fiche A et deux fois sur la fiche B, doit-il apparaitre une fois sur la fiche A et une fois sur la fiche B, ou une fois sur la fiche A et pas sur la fiche B ?

Re: Aide SQL Select

Posté : 16 sept. 2011, 14:53
par hashut
la table user information utilisateur la table fiche résultat de toutes observation
je fais teste juste récupérer que les mail
je teste sa et je vous dit

Re: Aide SQL Select

Posté : 16 sept. 2011, 15:11
par hashut
marche pas

meme en exportant que les mail

$requete=@mysql_query("SELECT distinct email FROM user where id='$id_user'");

cela fonctionne pas

Re: Aide SQL Select

Posté : 19 sept. 2011, 22:57
par moogli
SELECT distinct email FROM user where id='$id_user'
- id => a vu de nez c'est un entier donc pas besoin de ' autour c'est réservé aux chaines de caractère !
- avec ça je ne comprend à quoi peux servir le distinct vu que par défaut dans une table utilisateur ben y qu'une seul adresse email de renseignée. s'il y a en plus c'est un défaut de conception du modèle de base de donnée :)


qu'est ce que tu entend par "ça marche pas" ? (tu ne dit pas a ton doc "j'ai malade soigne moi" ;) ).

il nous faut plus d'info.
si tu vire la partie where tu va avoir tous les emails unique de la table user. (au cas ou tu enregistre plusieurs utilisateurs avec le même email ...)
qu'elles sont les structures des tables (show create table ou export via phpmyadmin).
a tu testé tes requêtes avec la console mysql ou phpmyadmin ?

un truc du genre select email from user where id in (select distinct id_user from fiche); ?

@+

Résolu : Aide SQL Select

Posté : 20 sept. 2011, 14:43
par hashut
Ben oui bien sur je suis trop con le distinct pas mis sur le bon sélect
merci

Code : Tout sélectionner

<?php include('../conf/conf.php'); @mysql_connect($serveur,$user,$passw) or die("Impossible de se connecter à la base de données"); @mysql_select_db("$bd_base") or die("Impossible de se connecter à la base de données"); $query = "select distinct id_user from fiche"; $result = mysql_query($query); $nb = mysql_numrows($result); $i=0; while ($i < $nb){ $id_user = mysql_result($result,$i,"id_user"); $date = date('j_m_Y'); header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=email-observateur_$date.xls"); include('../conf/conf.php'); $bdd = mysql_connect($serveur,$user,$passw); mysql_select_db((observatoiremigrateurs),$bdd); #$requete=@mysql_query("SELECT prenom,nom,email FROM user where id='$id_user'"); $requete=@mysql_query("select prenom,nom,email from user where id='$id_user'"); if (@mysql_numrows($requete) ==0) { print "<script> alert('La requ&egrave;te n\'a pas abouti !')</script>"; } print '<table border=1> <TR><TD><b>Prénom</b></TD><TD><b>Nom</b></TD><TD><b>Email</b></TD></TR><TR>'; for ($ligne=0 ; $ligne<@mysql_numrows($requete);$ligne++) { for ($colonne = 0;$colonne < 3 ; $colonne++) { print '<TD>' .mysql_result($requete , $ligne,$colonne). '</TD>'; } print '</TR>'; } print '</TABLE>'; mysql_close(); $i++; } ?>