Я запускаю запрос MySQL для ранжирования пользователей моего сайта в соответствии с количеством обзоров книг и обзоров рецептов, которые они внесли. После начальных проблем с несколькими JOIN-запросами я переключился на ряд подзапросов, что намного, намного быстрее. Однако, хотя я могу извлечь количество отзывов от каждого участника, я не могу понять, как их добавить, чтобы сортировать по общему числу.Как добавить результаты нескольких подзапросов?
Вот текущий запрос:
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
Мне нужно добавить вместе bookreviews и recipereviews, чтобы получить 'reviewtotals'. MySQL не позволит вам использовать простой синтаксис для выполнения вычислений на псевдонимах, но я предполагаю, что есть другой способ сделать это?
@mandel, мне любопытно, о ваших проблемах с 'JOIN' обычно, я решить такого рода проблемы с' JOIN' - см мой ответ на Справка. По моему опыту, который обычно намного быстрее для MySQL, чем несколько взаимосвязанных подзапросов, подобных вам. Мне было бы интересно услышать, будет ли в вашем случае решение подзапроса быстрее, чем JOIN. Я был бы очень признателен, если бы вы могли сообщить мне. –
Мои проблемы с JOIN исходили из неопытности, а не из философии. Мой предыдущий JOIN привел к ужасно медленному запросу - 9 секунд; оказалось, что он создает декартово произведение. Я спросил об этом здесь: http://stackoverflow.com/questions/2030032/is-performing-a-count-calculation-slowing-down-my-mysql-query. Когда я обратился к выполнению подзапросов, скорость резко улучшилась, и я мог понять, что я делаю! – mandel
См. Мой ответ на ваш пост для сравнения скорости. Ваш запрос JOIN немного быстрее, но только 4/100ths секунды при текущем размере DB. – mandel