两个查询结果的比较 - 如果一个查询结果在另一个查询结果中 - MySQL 还是 PHP?

时间:2021-03-18 23:11:14

标签: php mysql subquery

我目前遇到以下问题:

我有一个公式,人们可以在那里预约(房间、时间、日期)。这一切正常,但现在我必须进行以下比较:

从现在开始,每个人每周只能进行一次约会 - 所以我必须将“选择的约会”与数据库中已有的约会进行比较。如果此人已经有所选周的约会,我要留言...

数据库表是这样的:

  • 成员 [id(类型:int)、姓名、邮件、密码等)
  • possibledays [id(类型:int)(主键,ai),约会(类型:日期)
  • rooms [id (type: int), room (type: varchar)]
  • 小时 [id (type: int), time (type: varchar)]
  • 约会[id (type: int), foreignkeyDate (foreignkey, int), fkey_room (foreignkey, int), fkey_hours (foreignkey, int], fkey_member (foreignkey, int), entrydate (timestamp)]

所有“id”都是主键,自动递增

我有两个查询(一个查询已经输入的某个人的约会,一个查询所选的约会...

第一次查询:

SELECT DISTINCT (YEARWEEK (appointment,1)) AS week FROM appointments 
LEFT JOIN possibledays ON appointments.foreignkeyDate = possibledays.id 
WHERE fkey_member= $who

第二次查询:

SELECT YEARWEEK (appointment,1) AS week FROM possibledays WHERE possibledays.id = $when

对主题的两个查询都可以正常工作 - 第一个查询为我提供所有预订的约会(例如“202111”和 10 个以上),第二个查询总是给我一个结果(例如 202111,也是)。

但是如果第二个查询的结果也在第一个查询中,我如何比较两个查询并证明?

Image of Query outputs

我也尝试过使用 IN-Operator:

SELECT YEARWEEK (appointment,1) AS week FROM possibledays 
WHERE possibledays.dateID = $when IN (SELECT DISTINCT (YEARWEEK (appointment,1)) 
AS week FROM appointments LEFT JOIN possibledays ON 
appointments.foreignkeyDate = possibledays.dateID
WHERE foreignMember = $who)

第二个查询的结果也在第一个!但是当我使用子查询尝试 IN 时,我没有得到任何数据而不是一行,这应该是结果!对于变量,我使用硬编码数字在 phpmyadmin 中进行测试。

我尝试了几种方法,但都没有奏效...我也在 PHP 中使用 in_array 进行过,但没有成功:

$alreadyBooked = $pdo->prepare("QUERY 1");
$alreadyBooked->execute();
$resultAlreadyBooked= $alreadyBooked->fetchAll(PDO::FETCH_ASSOC);

// 2nd Query:
$chosenAppointment= $pdo->prepare("QUERY 2");
$chosenAppointment->execute();
$resultChoosen = $choosenAppointment->fetchAll(PDO::FETCH_ASSOC);

// Look if resultChosen is already in DB
if(in_array($resultChosen, $resultAlreadyBooked)) {
echo "Sorry, you already booked one."; } else {
INSERT INTO... }

我还为两个查询创建了一个 while 循环,“数据输出”一切正常。我只是无法进行这种比较!如果有人知道解决方案,我会很高兴! (使用 PHP 7.4 和 MySQL 5.7.32)

1 个答案:

答案 0 :(得分:0)

无需尝试为您完成所有工作,似乎“WHERE x NOT IN(子查询)”查询应该可以完成这项工作。

相关问题