【问题标题】:Trouble identifying the right query involving my two tables无法识别涉及我的两个表的正确查询
【发布时间】:2021-04-27 02:22:32
【问题描述】:

我正在编写一个网站,作为为亲人寻找献血者和自愿献血者之间的桥梁。

为了让注册的献血者预约献血,他们应该首先打开一个“献血页面”,在那里他们可以找到可以献血的患者。

我希望页面显示以下献血请求:

  1. 捐赠者尚未预约捐赠对象
  2. 尚未为他们设置任何献血预约。

这是我的第一张表:献血请求。用户在网站上提出的所有献血请求都会在这里(AcquirerID是指为患者提出献血请求的用户的用户ID)

| Name            | Type           | Collation          | Null | Default |
| ----------------| -------------- |--------------------|------|---------|
| patientID (FK)  | int(11)        |                    |      |         |
| acquirerID (FK) | int(11)        |                    |      |         |
| requestID (PK)  | varchar(255)   | utf8mb4_general_ci |  No  |    None |
| datePosted      | date           |                    |  No  |    None |  
| approved        |tinyint(1)      |                    |  No  |   0     |
| archived        |tinyint(1)      |                    |  No  |   0     |

这是我的第二张桌子,tblappointments。这是该网站的注册捐助者进行的所有约会的地方

| Name                | Type       |Collation          |Null    |Default|   Extra|
|---------------------|------------|-------------------|--------|-------|--------|
| id (PK)             |int(11)     |                   | No     | None  |AUTO_INCREMENT
| healthCenterID (FK) |int(11)     |                   | No     | None  |
|donorID (FK)         |int(11)     |                   | No     | None  |
|patientID (FK)       |int(11)     |                   | No     | None  |
|donationRequestID(FK)|varchar(255)|utf8mb4_general_ci | No     | None  |
|apptDate             |date        |                   | No     | None  |
|timeSlotID (FK)      |int(11)     |                   | No     | None  |
|confirmed            |tinyint(1)  |                   | No     |  0    | 
|completed            |tinyint(1)  |                   | No     | 0     |

这是我尝试的第一个查询

SELECT request.patientID FROM blooddonationrequest as request 
LEFT JOIN tblappointment as appt ON appt.donationRequestID = request.requestID 
WHERE appt.donationRequestID IS NULL

它成功返回了所有没有预约的献血请求,但是已经有其他献血者预约的献血请求,但没有当前登录的献血者呢?这就是我的挣扎

我对 SQL 代码进行了多次试验和错误,但未能记录和保存,但大多只是对上述 SQL 的修改。我拼命地尝试在查询中包含and appt.donorID != $_SESSION['userID'] 之类的内容,但当然这不起作用。

那么,我应该使用哪些查询?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您的模型和您的要求对我来说不是很清楚 - 我不得不阅读它 5 次以试图了解您拥有什么以及您要求什么。让我试着播放给你听,看看我是否听懂了。

    您有一份要求献血或有其他人 (AcquirerID) 代表他们要求献血的患者 (PatientID) 列表。您有第二个与第一个表中的请求匹配的捐赠者预约列表。出于某种原因,您将请求的链接和患者的链接都存储在同一个表中,这不是很规范化,并且可能导致一些数据异常。

    您想查找所有有未完成请求但尚未预约的患者。

    如果这样说,我会加入两个表而不是 RequestID 而是 PatientID 并查找 NULL。

    Select R.PatientID From blooddonationrequests R Left Outer Join tblappointments A
                              On R.PatientID=A.PatientID
    Where A.PatientID Is Null
    

    由于您的模型允许同一位患者多次请求捐款,因此如果您只需要一位患者一次,则可能需要将它们组合在一起。

    【讨论】:

    • 谢谢,此查询实际上不显示已经预约的献血请求。我希望页面显示当前登录的献血者尚未预约的献血请求。这意味着,献血请求可能已经由献血者 A 设置了预约,但如果献血者 B 登录并且尚未为该请求设置预约,则该请求仍应在页面上可见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2015-04-09
    相关资源
    最近更新 更多