나는 그들이 제출 한 서평 및 조리법 리뷰의 수에 따라 사이트 사용자를 순위 매기기 위해 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
내가 'reviewtotals'를 얻기 위해서 함께 bookreviews 및 recipereviews을 추가해야합니다
여기에 현재 쿼리입니다. MySQL은 간단한 구문을 사용하여 별칭에 대한 계산을 허용하지 않지만이 작업을 수행 할 다른 방법이 있습니까?
@mandel - 내 대답을 참조하십시오 나는이 매우 특별한 경우에 안전합니다 예측 참고. 제 경험상 대개 MySQL과 관련하여 여러 개의 상관 관계가있는 서브 쿼리보다 훨씬 빠릅니다. 나는 당신의 경우 서브 쿼리 솔루션이 JOIN보다 빠르다는 것을 듣고 싶다. 네가 내게 알려주면 많이 감사 할께. –
JOIN의 문제점은 철학보다는 미숙 한 경험에서 비롯된 것입니다. 이전의 JOIN 결과는 9 초였습니다. 카티 시안 (Cartesian) 제품을 만드는 것으로 밝혀졌습니다. 나는 그것에 대해 여기에서 물었다 : http://stackoverflow.com/questions/2030032/is-performing-a-count-calculation-slowing-down-my-mysql-query. 서브 쿼리를 사용하는 것으로 바뀌었을 때 속도가 크게 향상되었으며 내가하는 일을 이해할 수있었습니다. – mandel
속도 비교를 위해 게시물에 대한 내 답변보기 - JOIN 쿼리는 현재 DB 크기에서 초당 4/100 초만 빨라졌습니다. – mandel