我对SQL很陌生,所以请原谅。我使用的是phpMyAdmin v3.4和MySQL (服务器版本) v5.5。是否可以为病人提供一个下拉列表,从两个不同的列中提取其数据?详情如下:
表:实践
SurgeryID | Doctor | Assistant
1_______________| Atkin__| Cashmore
2_______________| Obrien | Morgan
3_______________| Heron_ | Chapman
Table: BOOKING
BookingID | PatientName | DocOrAss
10001___ | Spock___________ | Atkin (DropDownListOffered)
10002__________| Scotty_____________ | Morgan (DropDownListOffered)
10003__________| Kirk_______________| Heron (DropDownListOffered)病人只属于一种特定的外科手术(SurgeryID,即PK),必须能够(从下拉列表中)选择医生(唯一的),或者医生助理(唯一的),但不能两者兼而有之,即病人不应该能够看到在其他外科手术的其他医生和助理。我知道,也许更常见的情况是,表的结构使医生和助手在同一列中,但我想了解,是否可以将两个不同的列视为一列。
我想简单地实现这一点,作为一个永久的表,也许是通过某种组合键,而不是在代码中操作。如果这是不可能的,例如,也许没有功能来帮助做这个,或者表结构被认为是糟糕的设计,那么我将继续-任何关于重新设计的建议都是欢迎的。
感谢你的期待。
发布于 2013-12-19 00:57:57
我认为您所要做的事情可以使用SQL来完成,类似于下面的SQL将表与其自身结合起来,并为这2种不同的列分配相同的别名。
select
doctor as DocOrAss
from
practice
where
surgeryid = 1
union
select
assistant as DocOrAss
from
practice
where
surgeryid = 1结果应类似于
DocOrAss
--------
Atkin
Cashmore然而,这种设计感觉不太正确。
当你选择一个DocOrAss时,你可能会遇到一个问题,你怎么知道他们是医生还是助手?另外,你怎么能很容易地找到他们的手术呢?
练习表设计的问题是,您的表似乎有3项职责
这对于一张桌子来说有点过分,如果一个手术可以有一个以上的医生,这就违反了1NF原则。如果能把它分成三张表,也许会更好。
或者,如果您所要做的只是列出某一特定手术中的所有医生(假设助手实际上只是其他医生),那么也许一个更好但仍然简单的设计可能是创建一个名为do (DoctorIdPk,Name,SurgeryId)的表。然后,您可以为来自特定surgeryId的所有医生进行选择。
https://stackoverflow.com/questions/20670514
复制相似问题