Je lance une requête MySQL pour classer les utilisateurs de mon site en fonction du nombre de critiques de livres et de critiques de recettes qu'ils ont contribué. Après les problèmes initiaux avec une requête JOIN multiple, je suis passé à une série de sous-requêtes, ce qui est beaucoup, beaucoup plus rapide. Cependant, bien que je puisse extraire le nombre de critiques de chaque membre, je ne peux pas trouver comment les ajouter ensemble afin que je puisse trier par le nombre total.Comment ajouter ensemble les résultats de plusieurs sous-requêtes?
est ici la requête en cours:
SELECT users.*,
(SELECT count(*) FROM bookshelf WHERE bookshelf.user_id = users.ID) as titles,
(SELECT count(*) FROM book_reviews WHERE book_reviews.user_id = users.ID) as bookreviews,
(SELECT count(*) FROM recipe_reviews WHERE recipe_reviews.user_id = users.ID) as recipereviews
FROM users
Je dois ajouter ensemble bookreviews et recipereviews pour obtenir 'reviewtotals'. MySQL ne vous permettra pas d'utiliser une syntaxe simple pour faire des calculs sur les alias, mais je suppose qu'il y a une autre façon de faire cela?
@mandel, je suis curieux de savoir vos problèmes avec 'JOIN' en général, je résoudre ce genre de problème avec un' JOIN' - voir ma réponse pour référence. D'après mon expérience, MySQL est généralement beaucoup plus rapide que plusieurs sous-requêtes corrélées comme vous l'avez fait. Je serais intéressé d'entendre si dans votre cas la solution de sous-requête est plus rapide que le JOIN. J'apprécierais beaucoup si vous pouviez me le faire savoir. –
Mes problèmes avec JOIN sont venus de l'inexpérience plutôt que de la philosophie. Mon précédent JOIN a abouti à une requête terriblement lente - 9 secondes; avéré qu'il était en train de créer un produit cartésien. J'ai demandé à ce sujet sur SO ici: http://stackoverflow.com/questions/2030032/is-performing-a-count-calculation-slowing-down-my-mysql-query. Quand je me suis tourné pour faire des sous-requêtes, la vitesse s'est considérablement améliorée, ET je pouvais comprendre ce que je faisais! – mandel
Voir ma réponse à votre message pour une comparaison de vitesse - votre requête JOIN est un peu plus rapide, mais seulement 4/100ème de seconde à la taille de la base de données actuelle. – mandel