【问题标题】:What SQL command is required for the following problem?以下问题需要什么 SQL 命令?
【发布时间】:2019-03-31 13:52:36
【问题描述】:

我正在尝试通过使用他们的用户名来显示登录用户的所有约会,该用户名链接到与约会相关联的 PatientNumber。只是想知道什么 SQL 语句能够执行此操作?

我的表格如下:

约会

APNo    Weekstart   Day APTime  DNo PNo
   1    01-01-2019   M   9:00    1  1

患者

PNo  FIRSTNAME     LASTNAME  ADDRESS       username
 1     Joe            Bloggs  1 The Road    joe123

用户

id    username   password
 1      joe123    *hashedpassword*

对于更多的上下文,这将通过 php 使用会话用户名

【问题讨论】:

  • 您很可能只需要一堆连接。您是否尝试过任何方法,您可以在您的问题中添加一些示例数据吗?
  • 我尝试了几个连接,但不确定哪个是最好的选择

标签: php mysql sql join select


【解决方案1】:
SELECT * FROM Appointment A, Patient P WHERE A.PNo = P.PNo AND P.username = 'theUsernameOfYourUser';

由于A.PNoP.PNo 具有相同的列名,您甚至可以使用NATURAL JOIN(更短的语法):

SELECT * FROM Appointment NATURAL JOIN Patient WHERE username = 'theUsernameOfYourUser';

【讨论】:

  • 知道为什么我现在收到错误:'where 子句'中的未知列'joe123'?
  • 显示您的查询,您是否将 joe123 放在 '' 之间?
  • "SELECT * FROM APPOINTMENT NATURAL JOIN PATIENT WHERE username = $sessionusername;"
  • 试试这个:"SELECT * FROM APPOINTMENT NATURAL JOIN PATIENT WHERE username = '$sessionusername';"
【解决方案2】:

请在 php 中尝试以下查询

$username = $_SESSION['username'];

$sql = "Select u.username, p.FIRSTNAME, a.WeekStart, a.APTime From Patient p,User u,Appointment a
where p.username='$username' AND p.PNo = A.PNo"

【讨论】:

    【解决方案3】:

    加入表格并可能在Weekstart 上应用过滤器:

    select
      a.*, p.*
    from appointment a inner join patient p
    on p.pno = a.pno
    where p.username = '$username'
    and weekstart = ? -- you can remove this if you don't need it.
    

    【讨论】:

    • 感谢回复,怕是不行,请您解释一下“inner joinointment a on a.dno = u.id”的原因吗?
    • 链接到用户表的id不是a.dno吗?
    • 用户名是用户和患者的联系,pno是患者和预约的联系
    • 您真的将用户名保存在 Patient 中吗?如果更改用户名会发生什么?您是否在两个表中都进行了 2 项更改?
    • 因此您不需要连接中的用户表。请参阅我编辑的答案。
    【解决方案4】:

    试试这个说法:

    SELECT Appointment.* ,temp.username FROM Appointment,
    (SELECT PNo as Pno, username AS username FROM Patient,
    User WHERE Patient.username=User.username) AS temp 
    WHERE temp.Pno=Appointment.PNo;
    

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2021-02-28
      • 2010-12-10
      • 1970-01-01
      • 2023-03-14
      • 2013-01-28
      相关资源
      最近更新 更多