Jointure multiple 3 tables + trier par order count()... dur!

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Jointure multiple 3 tables + trier par order count()... dur!

par Hubert Roksor » 11 juin 2007, 17:34

Ben tu exécutes la requête, tu nous donnes les 5-10 premières lignes de résultat, tu décris en quoi elle sont fausses et quels résultats tu attendais.

Idéalement, utilise le client MySQL pour tes requête, de façon à ce que les résultats soit formatés et lisibles. Au pire, si tu n'arrives pas à bien aligner les machins avec les balises

Code : Tout sélectionner

fais une capture d'écran des résultats dans phpMyAdmin, en ne capturant que les résultats, merci ;) (autrement dit, pas la fenêtre entière)

par cfiles » 11 juin 2007, 14:00

Je n'ai pas compris ce que tu me demandes de faire. Pour l'instant, je ne fais la requête que directement dans phpmyadmin, donc pas de mysql_query()...

par Hubert Roksor » 10 juin 2007, 22:57

Poste la requête exactement comme elle est executée (en gros, remplace mysql_query() par die()) ainsi qu'un échantillon des données qu'elle retourne et le même échantillon corrigé pour correspondre à ce que tu veux récupérer.

par cfiles » 10 juin 2007, 21:36

Bouhou !!!!!!!!! Ca marche toujours pas... les résultats sont faux !!
Et dire qu'à force de "répondre", j'ai dépassé les 25 posts et je suis passé au statut "maitre du phpinfo()" LOL !! Je ne suis maitre de rien du tout !:)
Caro... presque plus de cheveux... :shock:

par fab » 10 juin 2007, 21:09

Soit c'est moi qui débloque soit tu as pas mis de clause WHERE donc en fait tu fais un COUNT sur toute ta table
Je lui ai indiqué d'utiliser un JOIN ... ON ... dans sa requète.
Désolé j'avais pas vu :)

par Sékiltoyai » 10 juin 2007, 19:03

Soit c'est moi qui débloque soit tu as pas mis de clause WHERE donc en fait tu fais un COUNT sur toute ta table
Je lui ai indiqué d'utiliser un JOIN ... ON ... dans sa requète.

par fab » 10 juin 2007, 17:12

Soit c'est moi qui débloque soit tu as pas mis de clause WHERE donc en fait tu fais un COUNT sur toute ta table

par Hubert Roksor » 10 juin 2007, 16:23

C'est bizarre qu'il ne connaisse pas news et qu'il connaisse pics...
En fait peut-être qu'il ne connait pas "pics" non plus mais qu'il s'arrête à la première colonne inconnue. Je ne suis pas sûr qu'on puisse utiliser d'aliases dans une expression dans la clause SELECT, réessayez avec l'expression complète pour voir ?

Code : Tout sélectionner

SELECT COUNT(newscomments.idauteur) + COUNT(photos_comments.idmembrepc) AS ordre FROM ... ORDER BY order DESC

par cfiles » 10 juin 2007, 13:19

Voilà la structure des tables :

CREATE TABLE `membres` (
  `idmembre` int(11) NOT NULL auto_increment,
  `nommembre` varchar(50) NOT NULL default '',
  `prenommembre` varchar(50) NOT NULL default '',
  `bdaymembre` date default NULL,
  `loginmembre` varchar(50) NOT NULL default '',
  `mdpmembre` varchar(50) NOT NULL default '',
  `mailmembre` varchar(50) NOT NULL default '',
  `urlmembre` varchar(100) default NULL,
  `urlpubmembre` char(1) default NULL,
  `inscrmembre` datetime NOT NULL default '0000-00-00 00:00:00',
  `statutmembre` varchar(10) NOT NULL default 'nouveau',
  `lastconnect` datetime default NULL,
  `deconnect` datetime default NULL,
  `verylcon` datetime default NULL,
  PRIMARY KEY  (`idmembre`),
  UNIQUE KEY `loginmembre` (`loginmembre`),
  UNIQUE KEY `mailmembre` (`mdpmembre`)
) ;

CREATE TABLE `newscomments` (
  `idcomment` int(5) NOT NULL auto_increment,
  `idnews` int(5) NOT NULL default '0',
  `datecomment` datetime NOT NULL default '0000-00-00 00:00:00',
  `auteurcomment` varchar(55) NOT NULL default '',
  `idauteur` int(11) default NULL,
  `loginauteur` varchar(50) default NULL,
  `mailreponse` varchar(50) default NULL,
  `corpscomment` text NOT NULL,
  PRIMARY KEY  (`idcomment`)
) ;

CREATE TABLE `photos_comments` (
  `idpc` int(11) NOT NULL auto_increment,
  `nompicpc` varchar(50) NOT NULL default '0',
  `signpc` varchar(50) NOT NULL default '',
  `idmembrepc` int(11) NOT NULL default '0',
  `loginmembrepc` varchar(50) NOT NULL default '',
  `commpc` text NOT NULL,
  `datepc` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`idpc`)
) ;

par Sékiltoyai » 10 juin 2007, 13:15

C'est bizarre qu'il ne connaisse pas news et qu'il connaisse pics...
Tu peux me dire ce que tu as comme noms de colonnes dans tes tables ?

par cfiles » 10 juin 2007, 12:59

Merci Sékiltoyai pour ta correction, ça parrait en effet plus juste mais il me répond toujours (comme à chaque fois que je cherche à faire news+pics) :
#1054 - Unknown column 'news' in 'field list' 
Snif !

J'ai essayé de changer aussi, ne pas faire un order by ordre mais par pics ou news, les résultats sont énormes encore... Alors j'ai regardé par rapport à ce qu'a dit iclo, mais je ne vois toujours pas... !

par Hubert Roksor » 10 juin 2007, 04:55

id, c'est un alias, apparement.
Ah oui tiens, au temps pour moi.

par Sékiltoyai » 10 juin 2007, 01:58

Et puis au passage il faudrait indiquer de quelles tables proviennent ces colonnes... notamment "GROUP BY id".
id, c'est un alias, apparement.

par iclo » 10 juin 2007, 01:19

Juste pour ajouter un petit complément théorique (vu que la cause du dernier problème a été visiblement trouvé):
Quand on débugge des select sur plusieurs tables et qu'on obtient un nombre de résultats énorme par rapport à ce qui se trouve dans les tables, c'est très probablement parce qu'il manque une jointure entre deux table (table1.id = table2.id_table1) et qu'on obtient donc un produit carthésien

C'est également une bonne raison pour tester ses scripts sur des tables contenant un nombre raisonnable de données, faire un produit carthésien sur une base de donnée en production contenant quelques centaines de milliers d'enregistrement, peut faire "gros bobos" au serveur.

par Hubert Roksor » 10 juin 2007, 00:40

Et puis au passage il faudrait indiquer de quelles tables proviennent ces colonnes... notamment "GROUP BY id".