Page 1 sur 1

Afficher une seule fois une entrée.

Posté : 29 août 2012, 14:02
par Jean-Mouloud
Bonjour,

J'ai deux tables jointes : la table propriétaire et la table jeux vidéos. Dans la table proprietaires il y a le nom de ceux qui possèdent les jeux vidéos (les jeux videos stockés dans la table jeux_video).Par exemple, il y a Jack dans la table proprietaires qui possède 20 jeux dans la table jeux_video. J'ai join ces deux tables et j'ai affiché les proprietaires. Mais puisque Jack possède 20 jeux, son prénom est affiché 20 fois. Y aurait-il uns fonction (SQL ou pas) qui permettrait d'afficher son prénom qu'une seule fois ?
Merci d'avance.

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 14:21
par moogli
Oui
Un if ;)

@+

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 15:22
par dix2
salut,

que cherches-tu à faire ?
si tu veux afficher les propriétaires qui possèdent au moins un jeu vidéo, tu peux faire :
SELECT proprietaire.prenom
FROM proprietaire, jeux_videos
WHERE proprietaire.id = jeux_videos.id_proprietaire
GROUP BY proprietaire.id
@+
dix2

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 15:51
par schim59
Bonjour,
Pas sûr d'avoir compris,
C'est DISTINCT pour afficher une seule entrée en cas de doublon dans une jointure.

Bon codage

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 16:11
par dix2
il y a plein de méthodes possibles
le DISTINCT est possible mais il faut le faire sur l'id et pas sur le prenom car si 2 proprietaires ont le même prenom, ce prénom n'apparaîtra qu'une fois au lieu de 2

pas bon :non: :non: :non: :
SELECT DISTINCT(proprietaire.prenom)
FROM proprietaire, jeux_videos
WHERE proprietaire.id = jeux_videos.id_proprietaire
bon =D> =D> =D> :
SELECT DISTINCT(proprietaire.id), proprietaire.prenom
FROM proprietaire, jeux_videos
WHERE proprietaire.id = jeux_videos.id_proprietaire
@+
dix2

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 16:58
par moogli
ou alors il veux afficher tous les jeux vidéo et les gens associé, sauf qu'il ne veux pas voir le nom des gens affiché autant de fois qu'ils sont de jeux.

donc le distinct n'est approprié !

deux solutions
- Faire une requête pour avoir les gens (donc sur la table des gens) et dans la boucle de traitement une requête ((préparée pour le coup) qui va chercher les jeux de la personne concernée.
coté perf et consommation réseau chez un doute.

- Garder sa requete actuelle et dans la boucle de traitement utiliser une variable "flag" qui contient la personne précédente, et un simple if pour savoir si la personne précédente est différente de celle de la ligne actuelle on affiche cette nouvelle personne et le flag prend la valeur actuelle (pour pas s'emmerder autant mettre l'id de la personne dans le flag).
C'est pas plus complexe que ça !

@+

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 17:18
par schim59
Le but est de voir les proprio qui ont des jeux.
Le DISTINCT convient.

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 17:43
par moogli
seul l'auteur du sujet peu l'affirmer et il n'a pas répondu !

ni donné de code d'ailleurs !


@+

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 18:40
par schim59
Alors en absence de précisions la regle est que J'AI RAISON

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 19:46
par xTG
Non c'est moi qu'à raison. |(X

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 21:32
par schim59
Non c'est moi qu'à raison. |(X
Mais tu as rien dit!

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 21:40
par Jean-Mouloud
Bonsoir,

Je vais m'expliquer un peu mieux parce que apparemment tout à l'heure ça n'allait pas.

J'ai deux tables : une table "proprietaires" (qui contient la liste des proprietaire : nom prenom et n° de tel) et la table "jeux_video" qui contient la liste des jeux-videos des propriétaires. Ces deux tables sont jointes. Pour que MySQL sache quel jeu appartient à qui, j'ai créé une colonne dans la table jeux_videos qui s'appelle "ID_proprietaire". Dans la table "proprietaires", il y a la colonne ID. Disons que Florent (qui est dans la table "proprietaires") a comme ID "2". Donc dans la table "jeux_video", tous les jeux-vidéos de Florent auront comme numéro d' "ID_proprietaire" le même que l'ID de Florent dans la table "proprietaires". C'est à dire 2.
Mais comme Florent a 16 jeux, son prénom sera affiché 16 fois dans ma page. Moi, ce que je voudrais faire, c'est afficher tous les jeux de Florent mais n'afficher son nom qu'1 fois. Comme ça en gros :


Voici la liste des jeux de Florent :
-Sonic;
-Super Mario;
-...
-...
-(etc)


Comment réaliser ce genre de trucs sachant que mes deux tables sont jointes ?

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 21:51
par dix2
dans ce cas, voir le post de moogli (avec une préférence pour la 2ème méthode)

Re: Afficher une seule fois une entrée.

Posté : 29 août 2012, 22:14
par Jean-Mouloud
Mais je ne comprends pas trop ce que c'est que le flag.

Re: Afficher une seule fois une entrée.

Posté : 30 août 2012, 08:58
par xTG
Le flag représente une information sauvegardée de l'état précédent.
Exemple :
$flag = ''; // initialisation à vide - ou une valeur ne pouvant exister dans le jeu de données
while( ... ){ // on itère sur une ressource que l'on va nommer $res ici
  if( $res['donnee'] != $flag ){
    // la donnee est nouvelle on la traite
    // traitement de la donnée...
    $flag = $res['donnee']; // on met à jour le flag
  }
}
Ainsi si tu as deux enregistrements avec la même donnee qui se suivent grâce au flag seul le premier sera traité.