[SQL] Requête croisée foireuse

Plop!

J’ai un petit problème avec MySQL. Je tente une requête pour développer un petit script perso pour DotClear2.
L’objectif est de ressortir les X articles qui ont été le plus commenté durant la semaine.
Voici ma requête :

SELECT `post_title` FROM `dc_post` , `dc_comment` WHERE `comment_dt` > '2007-01-10 00:00:01' AND `comment_status` = '1' GROUP BY `post_id.dc_comment` ORDER BY count( `post_id.dc_comment` ) DESC LIMIT 0 , 3
MySQL a répondu:

Le plus étonnant, c’est que ça couille au niveau du count(post_id.dc_comment), alors que la ligne précédente ne retourne pas d’erreur…

Une idée? Parce que là, je sèche B)

dc_comment.post_id (et pareil dans le count), nan?

Non, c’est pareil… Même erreur B)

Le count il a sa place dans une clause ORDER BY ? Je crois pas.
Mais je dit peut etre une connerie

Elle est ou ta jointure d’ailleurs (pas la non)? Elle est super chelou ta requete la, meme si on voit vaguement ce que tu veux faire sans voir les schema des tables en question et les FK ca va etre tendu.

Pour la jointure (je peux me tromper mais) il me semble avoir lu que ce n’était pas obligatoire avec MySQL

Hein? Au mieux il te manque un WHERE dc_post.post_id = dc_comment.post_id (ou un AND … dans le where) si les tables sont organisees comme je pense qu’elles sont, i.e. la jointure. Tu devrais t’assurer d’abord que tu fais les choses une par une en rajoutant la complexite etape par etape: fais ta requete avec juste un group by dans dc_comment, fais un count, fais un order by, fais la jointure avec la table des posts pour choper juste le titre des posts en question.

ORDER BY count( post_id.dc_comment ) DESC < chuis VRAIMENT pas sûr que ça soit faisable ça… d’ailleurs si tu « parses » le truc à la paluche, ça donne ça

ORDER BY (nombre de lignes dans post_id.dc_comment) DESC. et là, clairement, y’a un blem, tu peux pas ordonner ton résultat sur un agrégat.
Ou alors j’ai rien bité aux 2 jours de formation SQL dont je sors B)

Oui clair aussi, vns a raison, ca peut pas marcher du tout en l’etat. Comme je disais, la requete est super chelou B)

Même si ce n’est pas obligatoire, oblige toi à le mettre c’est plus propre, et je ne comprend pas trop la requête, tu fais une jointure entre les tables dc_post et dc_comment et tu fait un Group By sur le champs dc_comment de la table post_id ? Soit je suis totalement à coter de la plaque soit il y a une couille dans le paté.

tiens, je te renvois par là bas http://sql.developpez.com/

effectivement, claquer un COUNT derriere un ORDER BY, c’est maaaaaal.
Ton ORDER BY, tu bosses sur les clefs, ou a la rigueur sur des alias (si tu définis des alias dans ta requete)

ensuite, Commentaires et Posts sont dans des tables différentes (je viens de checker sur mon dotclear 1.25

là j’ai la tete dans le cul et mon SQL est trop rouillé pour que je me risque a te pondre une requete, mais le GROUP BY ne se substitue pas a la jointure (le classique WHERE table1.id = table2.id cf ici http://sql.developpez.com/sqlaz/ensembles/ )

Idee a la con en passant

LoneWolf
J'ai vu de la lumiere, tout ca...

Idee a la con en passant

LoneWolf
J’ai vu de la lumiere, tout ca…

C’est quel version de MySQL ? ça change beaucoup de chose. Pour les versions infèrieures à la 4.01, si ma mémoire est bonne, les sous-requêtes notamment ne sont pas acceptées.
edit: raz du message

Pfiou, tu t’embrouilles pour rien, ta requête devra ressembler à ça : [sql]SELECT post_title, nb_comment, post_url FROM dc_post WHERE ((post_status = ‘1’) AND (blog_id = ‘default’) AND (post_dt >= ‘??’)) ORDER BY nb_comment DESC LIMIT 5 ;[/sql]à part pour la date car je sais pas comment on fait. Pas besoin d’aller dans dc_comment compter les commentaires !

Edit : voir DATE_SUB.

Résultat à tester :[sql]SELECT post_title, nb_comment, post_url FROM dc_post WHERE ((post_status = ‘1’) AND (blog_id = ‘default’) AND (post_dt >= DATE_SUB(CURDATE(),INTERVAL 7 DAY))) ORDER BY nb_comment DESC LIMIT 5 ;[/sql]

Moe, on parle SQL pas LISP B)

J’ai parlé de LISP ? Ah bon. J’ignorais ce que c’était avant ton message.

un langage avec trop de parenthèses : “Lots of Irritating and Silly Parentheses”

[quote=“LoneWolf, post:12, topic: 32601”]select count(post_id) as count_post from [blabla jointure sisi c'est oblige la] order by count_post
Idee a la con en passant

LoneWolf
J’ai vu de la lumiere, tout ca…[/quote]

Je plussoie : select [ les champs genre titre, contenu, cout (nombre de commentaires) AS nb ] from [ table1, table2 ] where [ clee = clee etrangere ] order by nb DESC LIMIT [ limite ].

(note que j’ai pas voulu faire de doublon mais peut etre que c’est un tout petit peu plus clair )