Estoy ejecutando una consulta MySQL para clasificar a los usuarios de mi sitio de acuerdo con la cantidad de reseñas de libros y reseñas de recetas que han contribuido. Después de los problemas iniciales con una consulta JOIN múltiple, he cambiado a una serie de subconsultas, que es mucho, mucho más rápido. Sin embargo, aunque puedo extraer el número de revisiones de cada miembro, no puedo encontrar la manera de sumarlas para poder ordenar por el número total.¿Cómo agregar juntos los resultados de varias subconsultas?
Aquí está la consulta actual:
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
necesito sumar bookreviews y recipereviews para conseguir '' reviewtotals. MySQL no le permitirá usar sintaxis simple para hacer cálculos en alias, pero supongo que hay otra manera de hacer esto.
@mandel, tengo curiosidad acerca de sus problemas con 'JOIN' normalmente, yo a resolver este tipo de problema con un' JOIN' - ver mi respuesta para referencia. En mi experiencia, eso suele ser mucho más rápido para MySQL que múltiples subquerys correlacionadas como las que tiene. Me interesaría saber si en tu caso la solución de la subconsulta es más rápida que el JOIN. Te agradecería mucho si pudieras avisarme. –
Mis problemas con JOIN provienen de la inexperiencia en lugar de la filosofía. Mi anterior JOIN resultó en una consulta terriblemente lenta - 9 segundos; Resultó que estaba creando un producto cartesiano. Pregunté sobre esto en SO aquí: http://stackoverflow.com/questions/2030032/is-performing-a-count-calculation-slowing-down-my-mysql-query. Cuando comencé a hacer subconsultas, la velocidad mejoró dramáticamente, ¡Y pude entender lo que estaba haciendo! – mandel
Consulte mi respuesta a su publicación para una comparación de velocidad: su consulta JOIN es un poco más rápida, pero solo 4/100 de segundo con el tamaño de base de datos actual. – mandel