mysql、test(one)とreview(many)の2つのテーブル。 私の目標:出力クエリ結果をマージし、最適化しますか?
SELECT t.ID,t.TITLE,COALESCE(COUNT(r.ID),0) `count`
FROM `test` t
LEFT OUTER JOIN review r
ON t.ID = r.REVIEW_OBJ_ID
WHERE r.REVIEW_TYPE = '4'
ORDER BY `count` DESC;
対応する数の内の1つのレビューから:
ID TITLE count
402884f657e0a6d20157e0a82cc90000 brother 2
テストテーブル(データの小部分)
SELECT t.ID,t.TITLE
FROM `test` t;
出力:
ID TITLE
40284c8157ad8e7d0157ad8f86880000 123456789
402884f657e0a6d20157e0a82cc90000 brother
402884f657e0a6d20157e11967a20036 fg
402884f657e51eff0157e54cd8610004 AAA
402884f657e652fb0157e65642750000 BBB
0000000057f4dc900157f4ea9edd0000 VVV
00000000580065c5015800746d750000 CCC
00000000580065c501581d9f04f0000b TTT
これを取得したい:
ID TITLE count
402884f657e0a6d20157e0a82cc90000 brother 2
402884f657e652fb0157e65642750000 BBB 0
00000000580065c501581d9f04f0000b TTT 0
402884f657e0a6d20157e11967a20036 fg 0
0000000057f4dc900157f4ea9edd0000 VVV 0
40284c8157ad8e7d0157ad8f86880000 123456789
402884f657e51eff0157e54cd8610004 AAA 0
00000000580065c5015800746d750000 CCC 0
ので、私はこれを試してみました、それが働いた:
SELECT t.ID,t.TITLE, COALESCE(r.c,0) `count`
FROM `test` t
LEFT OUTER JOIN
(
SELECT r.REVIEW_OBJ_ID obj_id, COUNT(r.ID) c
FROM review r,`test` t
WHERE r.REVIEW_TYPE = '4'
AND t.ID = r.REVIEW_OBJ_ID
) r ON r.obj_id = t.ID
ORDER BY `count` DESC;
しかし、私は二つの質問があります。
- をそれは私が見つけたのいずれかを選択し、時間を使用することができます感じています結果は2回ありますが、最適化することはできますか?
- テストテーブルのフィールドに
count
(冗長)を追加することをお勧めします。
/レビュー対象とREVIEW_OBJ_ID「=レビュー対象を 『4』」私が使用して同じように、検討されているオブジェクトを決める連絡するtest
テーブル/
drop table if exists user_doctor_review;
create table review
(
ID varchar(64) not null,
USER_ID varchar(64),
DOCTOR_ID varchar(64),
REVIEW_TYPE varchar(1),
REVIEW_OBJ_ID varchar(64),
SERVICE_SCORE int(6),
REVIEW_CONTENT varchar(600),
REVIEW_TIME datetime,
POID varchar(64),
IS_ANONYMITY varchar(1),
CHECKED_STATUS varchar(1),
STATUS varchar(1),
REPLY_CONTENT varchar(600),
REPLY_TIME datetime,
DOCTOR_IS_READ varchar(1),
primary key (ID)
);
あなたがreview_obj_idているもののようなあなたのテーブルの構造を共有することができますか? –
明確に表現しているかどうか分かりません –