Używam kwerendy MySQL do rankingu użytkowników mojej witryny zgodnie z liczbą recenzji książek i recenzji receptury, które wnieśli. Po początkowych problemach z wieloma zapytaniami JOIN przełączyłem się na serię podzapytań, co jest znacznie, dużo szybsze. Mimo że mogę wyodrębnić liczby recenzji od każdego członka, nie mogę wymyślić, jak je dodać, aby można było sortować według łącznej liczby.Jak dodać wyniki kilku podkwerend?
Oto bieżące zapytanie:
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
muszę dodać razem bookreviews i recipereviews dostać "reviewtotals. MySQL nie pozwoli ci używać prostej składni do wykonywania obliczeń na aliasach, ale przypuszczam, że jest inny sposób na zrobienie tego?
@mandel, jestem ciekaw waszych problemów z 'JOIN' zazwyczaj rozwiązać tego rodzaju problemu z' JOIN' - zobacz moją odpowiedź dla odniesienie. Z mojego doświadczenia wynika, że jest ono zazwyczaj dużo szybsze w przypadku MySQL niż wiele podobnych podróbek. Byłbym zainteresowany, aby usłyszeć, czy w twoim przypadku rozwiązanie podkwerendy jest szybsze niż JOIN. Byłbym wdzięczny, gdybyś mógł dać mi znać. –
Moje problemy z JOIN pochodziły raczej z niedoświadczenia niż z filozofii. Mój poprzedni JOIN spowodował strasznie powolne zapytanie - 9 sekund; Okazało się, że tworzy produkt kartezjański. Zapytałem o to na SO tutaj: http://stackoverflow.com/questions/2030032/is-performing-a-count-calculation-slowing-down-my-mysql-query. Kiedy zwróciłem się do podkwerend, szybkość znacznie się poprawiła, I mogłem zrozumieć, co robiłem! – mandel
Zobacz moją odpowiedź na twój post dla porównania prędkości - twoje zapytanie JOIN jest trochę szybsze, ale tylko 4/100ths sekundy przy bieżącym DB wielkości. – mandel