Eviter la rédondence
Forum Programmation : Eviter la rédondence
Bonjour
J'ai créé une page afin de lister les derniers sujets d'un Forum selon le message
Code :
|
Mais il arrive qu'un même sujet (pid) revienne plusieurs fois, comment éviter cette redondance de même donnée ?
Merci
Message édité par Blacko@IDN le 16-11-2006 à 17:27:39
solution cochonne :
select distinct
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
Merci pour ta réponse
J'avais déjà essayé ça
Code :
|
Ca ne donne rien, des mêmes sujets reviennent plusieurs fois...
http://www.soccers.fr/dernieres-discussions.php
Message édité par Blacko@IDN le 16-11-2006 à 18:25:44
solution moins cochonne: GROUP BY:
Code :
|
Le 0 du limit ne sert à rien, c'est l'offset de départ qui est égal à 0 s'il est omis
Mais c'est effectivement plus propre de le mettre
Défiez-moi donc !
Répondre à crazycat@idn
Code :
|
avec un * comme liste de champs ca risque de ne pas marcher à part s'il n'y a que pid comme colonne
essaye de lister seulement les champs dont t'as besoin en utilisant distinct, ca devrait faire l'affaire.
Code :
|
Message édité par coca25 le 16-11-2006 à 21:37:22
heu, tu ne connais pas ipb?
ni même les forums?
pid représente souvent le Parent ID (donc le forum) et id l'IDentifiant unique du message.
Donc, un message dans la table post contient forcémment id et pid.
Et la requète fonctionne vu que je m'en sert
La tienne va renvoyer... une erreur vu que le champ de groupage n'est pas dans la liste des champs selectionnés
Message édité par crazycat@idn le 16-11-2006 à 21:30:01
Défiez-moi donc !
Répondre à crazycat@idn
effectivement c'est le copie coller
, en fait je voulais enlever le group by...
et effectivement je ne connais pas ipb mais pour moi il fallait mettre une fonction d'aggregation (sum, max ou autre) si la colonne n'était pas groupée
mais comme tu utilises déjà la requête... j'apprends des choses, c'est bien
je ne t'en veux pas, petit scarabé
Mais en règle générale, pid = parent-id et c'est toujours lié à un champ id.
Et dans le cas présent, tu as peut-être raison (surement), j'ai mal lu la question: je pensais que c'était les derniers messages.
Je me fouetterais demain avec des orties
Défiez-moi donc !
Répondre à crazycat@idn
ok, après une brève recherche sur internet pour parfaire mon savoir
il s'avère que cette fonctionnalité est propre à mysql...
| Citation :
|
oui, le fonctionnement du group by sur MySQL est parfois déconcertant, mais dans le cas présent il permet de simplifier.
En reprenant ta requète exemple, si tu ajoutait customer.name dans le group by, tu pourrais obtenir le double de résultats (chaque groupe de custid et chaque groupe de name), ou aucun (un group excluant l'autre) ou plus probablement le bon résultat.
En fait, le group by en MySQL est pratique pour faire des limitations lors de jointures, mais sinon il vaut mieux passer par des distinct()
Défiez-moi donc !
Répondre à crazycat@idn
Merci
J'ai testé mais et ça ne donne pas grand chose
tu veux quoi exactement? les rubriques des 50 derniers posts, c'est bien ça?
Défiez-moi donc !
Répondre à crazycat@idn
et si tu nous donnais plus de code que la ligne sql, ca serait peut etre plus simple pour aider
re désolé pour le retard
En gros, dans cette page; http://www.soccers.fr/dernieres-discussions.php
qui, à l'aide dernier message posté sur le Forum, donne la liste des derniers sujets actifs; il y'a des sujets qui reviennent plusieurs fois (car plusieurs posts récents desus)
J'aimerais que ces sujets n'apparaissent qu'une seule fois.
Voici le code déjà utilisé qui donne tous les sujets des plus récents messages.
Code :
|
| Citation : re désolé pour le retard |
Oh c'est juste un retard de 1 an et 2 mois
Et si tu remplaçais :
| Citation : $retour = mysql_query("SELECT * FROM ipb_posts ORDER BY pid DESC LIMIT 0, 50" ); |
Par
| Citation : $retour = mysql_query("SELECT author_name, distinct(topic_id) FROM ipb_posts ORDER BY pid DESC LIMIT 0, 50" ); |
Répondre à OmaR
lol c'est vrai que ça date
Sinon, le distinct() cause une erreur mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
met un or die(mysql_error()); après le mysql_query() que l'on voit l'erreur
Répondre à OmaR
Hi
En fait le disticnt n'a aucun effet comme je l'avais déjà testé plusieurs fois auparavant
Je m'étais trompé de $retour quand j'ai remplacé hier (devait etre tard lol)
Code :
|
Je vois vraiment plus à ce niveau
Hmm... petite technique bourrine ?
On va tester ça :
Code :
|
J'espère que j'ai pas oublié un truc... mais ça devrait le faire (oui c'est pas beau
)
Message édité par OmaR le 22-08-2007 à 09:37:32
Répondre à OmaR
Apparemment c'est parfait, t'as raison j'suis bourrin sur le coup
Merci encore
Il y a 560 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
