mySQL count 여러 테이블 의 데이터 실례 상세 설명

3383 단어 mysql다 표count
1.수요 실현
최근 에 성취 시스템 을 하면 서 성취 에 있어 많은 차원 이 수량 과 관련 이 있다.예 를 들 어 사용자 의 팬 수가 50 개 에 달 하 는 지,명성 이 자자 한 칭 호 를 부여 하고 사용자 가 100 번 에 달 하 는 지,찬성 손 칭 호 를 부여 하 는 지 등 이다.
팬 수 는 user_relation 표 입 니 다.
좋아요 수 는 user_praise 표 입 니 다.
예전 의 방법 에 따라 사용자 의 이러한 데 이 터 를 조회 해 야 한다 면 데이터 가 서로 다른 표 에 있 기 때문에 여러 개의 SQL 조 회 를 나 눌 수 있다.예 를 들 어:

SELECT count(*) mysh FROM user_relation WHERE other_uid =123456;

SELECT count(*) dzss FROM user_praise WHERE praise_uid = 123456;
그 다음 에 조 회 된 데 이 터 를 한 대상 에 밀봉 하여 클 라 이언 트 에 게 되 돌려 주거 나 다른 용도 로 사용 합 니 다.통계 가 필요 한 표 가 적 으 면 괜 찮 지만 성취 시스템 에서 여러 가지 성과 가 있 습 니 다.우 리 는 지금 12 장의 표 와 관련 되 어 있 습 니 다.이런 식 으로 조회 하면 12 개의 SQL 조 회 를 12 번 써 야 합 니 다.이것 은 기분 이 좋 지 않 습 니 다.
2.하나의 SQL 문 구 를 사용 하여 실현 할 수 있 습 니까?
답 은 긍정 적 이다.
이와 같이 여러 표 의 서로 다른 데 이 터 를 한 표 에 통합 할 때 우 리 는 UNION 으로 조작 할 수 있다.
우선 UNION 을 사용 하여 상기 문 구 를 고 칠 것 입 니 다.

SELECT wrzm,mysh,sgbh FROM (

 SELECT count(*) wrzm,0 mysh,0 sgbh FROM user_witness WHERE plan_uid = 123456

 UNION ALL

 SELECT 0 wrzm,count(*) mysh,0 sgbh FROM user_relation WHERE other_uid = 123456

 UNION ALL

 SELECT 0 wrzm,0 mysh,count(*) sgbh FROM plan_stage WHERE uid = 123456 AND status = 1

) t;
위 에서 조회 한 결과 에 따 르 면:

mysql_count_results
우 리 는 이 결과 가 이미 좀 그럴듯 하 다 는 것 을 발견 했다.만약 표 중의 wrzm ,mysh ,sgbh 의 데이터 세 줄 을 한 줄 로 바 꿀 수 있다 면 좋 겠 다.그래서 우 리 는 SUM 을 사용 할 생각 을 자 연 스 럽 게 할 수 있 었 다.

SELECT sum(wrzm) wrzm,sum(mysh) mysh,sum(sgbh) sgbh FROM (

 SELECT count(*) wrzm,0 mysh,0 sgbh FROM user_witness WHERE plan_uid = 123456

 UNION ALL

 SELECT 0 wrzm,count(*) mysh,0 sgbh FROM user_relation WHERE other_uid = 123456

 UNION ALL

 SELECT 0 wrzm,0 mysh,count(*) sgbh FROM plan_stage WHERE uid = 123456 AND status = 1

) t;
그리고 나 서 얻 은 결 과 는 다음 과 같다.

mysql_count_result_2
이로써 우리 가 원 하 는 결 과 를 얻 었 고 하나의 SQL 구문 에서 여러 표 의 count 통 계 를 실현 했다.
3.확장
그림 에서 보 듯 이 우리 가 얻 을 수 있 는 것 은 한 사용자 의 데이터 일 뿐 입 니 다.그러나 우리 가 통계 해 야 할 것 은 user_info 의 모든 사용자 입 니 다.그러면 간단 합 니 다.우 리 는 다시 고 쳐 씁 니 다.

SELECT uid,sum(wrzm) wrzm,sum(mysh) mysh,sum(sgbh) sgbh FROM (

 SELECT plan_uid uid,count(*) wrzm,0 mysh,0 sgbh FROM user_witness
  GROUP BY plan_uid

 UNION ALL

 SELECT other_uid uid,0 wrzm,count(*) mysh,0 sgbh FROM user_relation
  GROUP BY other_uid

 UNION ALL

 SELECT uid,0 wrzm,0 mysh,count(*) sgbh FROM plan_stage WHERE status = 1
  GROUP BY uid

) t GROUP BY uid;
검색 결과:

mysql_count_results_3
이 결과 에서 만약 우리 가 구체 적 인 사용 자 를 볼 필요 가 있다 면 마지막 에WHERE uid = 123456 이면 되 고 순 서 를 매 기 려 면 ORDER BY 을 직접 더 하면 된다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 논문 의 내용 이 여러분 이 my sql 을 사용 하거나 배 울 때 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.

좋은 웹페이지 즐겨찾기