8791 sujets

Développement web côté serveur, CMS

Bonjour a tous habituellement je poste plutôt dans le forum css mais la mon problème et d'ordre a ouvrir le dialogue avec monsieur le serveur distant Smiley smile

Voila j'ai une BDD que j'ai créer qui gère plusieurs fiches de membres du jeu auquel je joue et je souhaiterais ajouter une contrainte d'affichage. avec du code on voit plus clair !

Après ma connexion a ma BDD j'ai donc une requête comme celle-ci pour afficher mes utilisateurs :

	  $team = mysql_query ("SELECT qui, departement, pays, age FROM listprofils ORDER BY id " );

	  while ($donnees = mysql_fetch_array($team) )



je voudrais en plus ajouter un SELECT DISTINCT mais uniquement sur le champ "qui" afin de supprimer les doublon et ne garder que la derniere entrée.

J'ai cru lire que la fonction "UNION" pouvais faire ça mais je n'arrive pas a trouver la bonne syntaxe de plus UNION doit renvoyer le membre nombre de colonne alors que je ne veux porter que sur le champ "qui" après tout mes champ sont de type "text" sauf le champ "id" biensur.

Pour expliquer le résultat que j'attends,

afficher la liste des membres enregistrés dans ma BDD mais il peut arriver qu'une personne donc le champ "qui" soit présent plusieurs fois car possède plusieurs personnage. Je voudrais n'afficher que le dernier (donc en triant par l'id) entré.

si je suis pas suffisamment clair j'essaierai de faire le point selon les commentaires !

A vous les experts !

edit : merci au modérateur qui a déplacer mon post Smiley smile
Modifié par Ankart (26 Mar 2009 - 23:34)
Administrateur
GROUP BY qui
...permettrait d'obtenir des identités uniques, mais il ne garantit pas de renvoyer les derniers résultats.

Il faut probablement le combiner à autre chose.
Effectivement ca rend unique la sortie mais pas pas la derniere ID mais par la premiere et en ignorant qu'il y en a d'autre il se limite a la premiere qu'il trouve... vais chercher un peu autour de ca ! pour mon probleme de requete je le marque resolu.
Et je cherche pour cette histoire d'id Smiley smile
Modifié par Ankart (26 Mar 2009 - 20:37)
ca bloque ca bloque ...

effectivement me suis dit ben j'ai plus qu'a trier mon resultat mais le tri se faisant d'apres le group by il ne le fait que sur la premiere entré.

l'idée est donc maintenant de faire un order by avant le group by ...

ca marche dans l'autre sens a savoir faire

("SELECT id, qui FROM listprofils GROUP BY qui ORDER BY id DESC" );


et il me faudrait l'inverse (syntaxe ne marche pas) a savoir :

("SELECT id, qui FROM listprofils ORDER BY id DESC GROUP BY qui" );


Comment faire ca ??? Smiley biggol
Salut,

pas sûr d'avoir bien compris mais à priori tu pourrais faire :
SELECT qui, departement, pays, age
FROM listprofils
WHERE id
IN (
SELECT max( id )
FROM listprofils
GROUP BY qui
)
ORDER BY qui
On peut tout de même s'interroger sur ta table car :
* pourquoi autoriser plusieurs enregistrements avec le même champ qui ? (il suffirait de faire un UPDATE pour un qui déjà existant)
* le nom du champ qui est d'ailleurs plutôt vague (contrairement à pseudo par exemple)... mais bon, je suppose que c'est réfléchi.
* à priori le champ pays devrait être dans une autre table (par exemple départements) puisque pour un même département c'est redondant...
* le champ age me semble également mal venu puisque par définition il se modifie au fil du temps (dans la vraie vie mais pas dans ta table) et donc il aurait mieux valu saisir la date de naissance par exemple (qui, elle, est fixe).
a écrit :
pourquoi autoriser plusieurs enregistrements avec le même champ qui ? (il suffirait de faire un UPDATE pour un qui déjà existant)


parce qu'un meme utilisateur peut avoir plusieurs personnage donc plusieurs pseudo et que je souhaite les conserver pour une utilisation ulterieur.

a écrit :
le nom du champ qui est d'ailleurs plutôt vague (contrairement à pseudo par exemple)... mais bon, je suppose que c'est réfléchi.


le champ "qui" correspond au login pour s'identifier sur le site. J'ai aussi une champ "pseudo" certe pas appelé ici mais il est present dans ma BDD.


a écrit :
à priori le champ pays devrait être dans une autre table (par exemple départements) puisque pour un même département c'est redondant...


Certe mais c'est juste que j'ai fait une base pour tout les profils.


a écrit :
le champ age me semble également mal venu puisque par définition il se modifie au fil du temps (dans la vraie vie mais pas dans ta table) et donc il aurait mieux valu saisir la date de naissance par exemple (qui, elle, est fixe).


Tres bonne remarque je te remercie de le souligner j'avais surement la tete ailleurs Smiley smile merci bien Smiley smile


Bon et je vais tester ca maintenant Smiley lol
Yahouuuuu ca marche !!! merci beaucoup pour cette syntaxe !

Merci a tous ceux qui ont cherché aussi Smiley smile

marqué resolu Smiley smile
Ankart a écrit :
pourquoi autoriser plusieurs enregistrements avec le même champ qui ? (il suffirait de faire un UPDATE pour un qui déjà existant)


parce qu'un meme utilisateur peut avoir plusieurs personnage donc plusieurs pseudo et que je souhaite les conserver pour une utilisation ulterieur.Il n'empêche que cela n'est pas normalisé (ce qui explique l'utilisation d'une requête "saugrenue" Smiley langue ) et que tu te simplifierais certainement la vie en créant une nouvelle table (par exemple pseudos) qui contiendrait quelque chose comme :
* id_pseudo
* qui (lien avec la table listprofils)
* etc.
a écrit :
(ce qui explique l'utilisation d'une requête "saugrenue" Smiley murf )


j'aime beaucoup saugrenue Smiley ravi

a écrit :
créant une nouvelle table (par exemple pseudos) qui contiendrait quelque chose comme :
* id_pseudo
* qui (lien avec la table listprofils)
* etc.


Effectivement ca permettrai un UPDATE là Smiley lol

C'est mon premier espace membres j'ai surement beaucoup de choses a decouvrir encore !
Mais comme dit le proverbe : C'est en forgeant qu'on devient forgeron Smiley ravi

Merci pour ton aide ainsi que tes suggestions qui sont véritablement des sources d'inspirations pour le futur Smiley smile