Se connecter avec
S'enregistrer | Connectez-vous

Eviter la rédondence

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

  1. group by id

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.
  1. select distinct pid FROM ipb_posts ORDER BY pid DESC LIMIT 50

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 :) 

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 :) 

ok, après une brève recherche sur internet pour parfaire mon savoir :D 
il s'avère que cette fonctionnalité est propre à mysql...

Citation :

mysql> SELECT order.custid,customer.name,MAX(payments)
-> FROM order,customer
-> WHERE order.custid = customer.custid
-> GROUP BY order.custid;

En SQL standard, vous devriez ajouter la colonne customer.name à la clause GROUP BY. Avec MySQL, ce nom est redondant si vous n'utilisez pas le mode ANSI.

N'utilisez pas cette fonctionnalité si les colonnes que vous omettez dans la clause GROUP BY ne sont pas unique dans le groupe!! Vous auriez des résultats inattendus!

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()

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.

  1. $retour = mysql_query("SELECT * FROM ipb_posts ORDER BY pid DESC LIMIT 0, 50");
  2. while ($donnees = mysql_fetch_array($retour))
  3. {
  4. $posteur = $donnees['author_name'];
  5. $id_topic = $donnees['topic_id'];
  6.  
  7. $retour2 = mysql_query("SELECT * FROM ipb_topics WHERE tid='$id_topic'");
  8. while ($donnees = mysql_fetch_array($retour2))
  9. {
  10. $forum = $donnees['forum_id'];
  11. $titre = $donnees['title'];
  12.  
  13. $retour3 = mysql_query("SELECT * FROM ipb_forums WHERE id='$forum'");
  14. while ($donnees = mysql_fetch_array($retour3))
  15. {
  16. $nom_forum = $donnees['name'];

Expert Programmation

Citation :
re désolé pour le retard ;) 


Oh c'est juste un retard de 1 an et 2 mois :D 

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

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) :jap: 

  1. $retour = mysql_query("SELECT * FROM ipb_posts ORDER BY pid DESC LIMIT 0, 50");
  2. while ($donnees = mysql_fetch_array($retour))
  3. {
  4. $posteur = $donnees['author_name'];
  5. $id_topic = $donnees['topic_id'];
  6.  
  7. $retour2 = mysql_query("SELECT * FROM ipb_topics WHERE tid='$id_topic'");
  8. while ($donnees = mysql_fetch_array($retour2))
  9. {
  10. $forum = $donnees['forum_id'];
  11. $titre = $donnees['title'];
  12.  
  13. $retour3 = mysql_query("SELECT * FROM ipb_forums WHERE id='$forum'");
  14. while ($donnees = mysql_fetch_array($retour3))
  15. {
  16. $nom_forum = $donnees['name'];

Je vois vraiment plus à ce niveau :heink: 
Expert Programmation

Hmm... petite technique bourrine ?
On va tester ça :

  1. $retour = mysql_query("SELECT distinct(topic_id) topic_id FROM ipb_posts ORDER BY pid DESC LIMIT 0, 50");
  2. while ($donnees = mysql_fetch_array($retour))
  3. {
  4. $id_topic = $donnees['topic_id'];
  5. $retour1 = mysql_query("SELECT author_name FROM ipb_posts WHERE topic_id={$donnees['topic_id']} ORDER BY pid DESC LIMIT 1");
  6.  
  7. $donnees1 = mysql_fetch_array($retour1);
  8. $posteur = $donnees1['author_name'];
  9. $retour2 = mysql_query("SELECT * FROM ipb_topics WHERE tid='$id_topic'");
  10. while ($donnees = mysql_fetch_array($retour2))
  11. {
  12. $forum = $donnees['forum_id'];
  13. $titre = $donnees['title'];
  14. $retour3 = mysql_query("SELECT * FROM ipb_forums WHERE id='$forum'");
  15. while ($donnees = mysql_fetch_array($retour3))
  16. {
  17. $nom_forum = $donnees['name'];


J'espère que j'ai pas oublié un truc... mais ça devrait le faire (oui c'est pas beau :D )
Lassé par la pub ? Créez un compte
Tom's guide dans le monde