テーブル訪問;
fields [id、patient_id(fk)、doctor_id(fk)、flag(Xfk)、type(Xfk)、time_booked、date、...]
Xfk =他のテーブルを参照しますが、存在する必要はないので、constraintは使用しません。
SELECT `v`.`date`, `v`.`time_booked`, `v`.`stats`, `p`.`name` as pt_name,
`d`.`name` as dr_name, `f`.`name` as flag_name, `f`.`color` as flag_color,
`vt`.`name` as type, `vt`.`color` as type_color
FROM (`visits` v, `users` p, `users` d, `flags` f, `visit_types` vt)
WHERE `p`.`id`=`v`.`patient_id`
AND `d`.`id`=`v`.`doctor_id`
AND `v`.`flag`=`f`.`id`
AND `v`.`type`=`vt`.`id`
AND `v`.`date` >= '2013-02-27'
AND (v.date <= DATE_ADD('2013-02-27', INTERVAL 7 DAY))
AND (`v`.`doctor_id`='00002' OR `v`.`doctor_id`='00001')
ORDER BY `v`.`date` ASC, `v`.`time_booked` ASC;
私が持っている1つの大きな統計!私の質問は、
1:複数のテーブルを選択する代わりに結合の使用を検討する必要がありますか?そして、私がなぜそうすべきか?
このクエリの実行時間は0.0009なので、問題ないと思います。すべてのデータを1つのクエリで取得するので、それとも悪い習慣ですか。
2:選択した部分で言いたい
v.type!= 0の場合、それ以外の場合は、select f.name,f.color
テーブルを選択する必要はありflags f
ませんか?
また、現在、フラグが見つからなかった場合は、フラグテーブルの行と同じ数のすべての行が複製されます。これを防ぐ方法はありますか?flagとvisit_typesテーブルの両方?