Résolu:Aide SQL Select

Eléphant du PHP | 223 Messages

16 sept. 2011, 11:31

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
Modifié en dernier par hashut le 20 sept. 2011, 14:45, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

16 sept. 2011, 11:44

Regardes du côté de l'instruction SQL : GROUP BY

Mammouth du PHP | 672 Messages

16 sept. 2011, 11:49

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

Eléphant du PHP | 223 Messages

16 sept. 2011, 12:05

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 sept. 2011, 12:23

group by ?

@+
Il en faut peu pour être heureux ......

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 sept. 2011, 14:12

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 ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 223 Messages

16 sept. 2011, 14:53

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

Eléphant du PHP | 223 Messages

16 sept. 2011, 15:11

marche pas

meme en exportant que les mail

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

cela fonctionne pas

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 sept. 2011, 22:57

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); ?

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 223 Messages

20 sept. 2011, 14:43

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++; } ?>