Envoyé par
Gingirou
Excusez moi de ne pas avoir respecté la norme de postage, je suis un novice sur le forum.
Nous sommes tous passés par là.
Il nous faudrait la composition de tes tables, par exemple à l'aide du résultat complet des requêtes SHOW CREATE TABLE la_table.
J'ai réécrit la requête en tenant compte de deux remarques (modification de la variable CAST et la syntaxe JOIN).
1 2 3 4 5 6
|
SELECT CASTING.idartiste AS idartisteN, AVG( CRIT.note ) AS Moyenne, CASTING.type AS typeartiste
FROM cinefamilia_casting CASTING LEFT JOIN cinefamilia_critique CRIT ON CRIT.idarticle=CASTING.idfilm
GROUP BY CASTING.idartiste
ORDER BY Moyenne DESC
LIMIT 0 , 100 |
C'est mieux. Autant utiliser des alisa les plus cours possibles ; 'ca' pour casting et 'cr' pour critique aurait été suffisant à la compréhension de la requête et aurait allégé son écriture et sa lecture.
Pour ce qui est du plan de requête, je ne connaissais pas et je viens de voir qu'il fallait rajouter EXPLAIN devant la requête. J'obtiens cela (je ne sais pas comment l'afficher correctement) mais je n'y comprends pas grand chose :
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE CASTING ALL NULL NULL NULL NULL 50362 Using temporary; Using filesort
1 SIMPLE CRIT ALL NULL NULL NULL NULL 4525
Visiblement, la requête n'utilise aucun index (possible_keys, key et key_len à NULL).
Concernant le problème sur les index (j'utilise phpmyadmin et Mysql), je ne sais pas si c'est tout à fait cela, mais je déclare des clefs primaires sur chaque table, et je n'ai jamais utilisé ce genre de syntaxe :
CREATE INDEX #nom_index ON #nom_schem.#nom_table
Donne la composition complète des tables (voir plus haut).
Je n'ai malheureusement pas compris le problème sur mon GROUP BY. Quelle est la syntaxe qui permet de faire figurer dans le GROUP BY des colonnes qui n'y sont pas sujettes ?
Dans le SELECT, tu as 3 colonnes de résultat :
- CASTING.idartiste ;
- CASTING.type ;
- AVG( CRIT.note ).
CRIT.note fait l'objet d'une opération de groupage (AVG) mais pas les deux autres. Il faut donc que les deux autres colonnes figurent dans le GROUP BY :
GROUP BY CASTING.idartiste, CASTING.type
Mais je suis toujours étonné par la condition de jointure !
Partager