表格访问;
字段[ID,patient_id(FK),doctor_id(FK),标志(XFK),类型(XFK),time_booked,日期,...]
Xfk =它引用其他表,但它不是必须存在所以我不使用约束。
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:我应该考虑使用join而不是选择多个表吗? 如果我应该为什么?
这个查询的执行时间是0.0009所以我觉得很好,因为我在一个查询中获取了所有数据,或者这是不好的做法?
2:在我想说的选择部分
如果v.type!= 0 select f.name,f.color
别的我不想选择那些表格flags f
有可能吗?
目前还没有找到flag,它会复制所有行,就像标志表中的行一样多!有什么方法可以防止这种情况吗?两者都是 flag和visit_types表?
答案 0 :(得分:1)
如果它运行得很快,我就不会搞砸了。我通常更喜欢使用连接而不是匹配where子句中的东西。
你有没有机会删除`字符?在我看来,只是让它更难阅读。
查看MySQL的案例陈述:http://dev.mysql.com/doc/refman/5.0/en/case.html
select case when v.type <> 0 then
f.name
else
''
end as name, ...