我目前遇到以下问题:
我有一个公式,人们可以在那里预约(房间、时间、日期)。这一切正常,但现在我必须进行以下比较:
从现在开始,每个人每周只能进行一次约会 - 所以我必须将“选择的约会”与数据库中已有的约会进行比较。如果此人已经有所选周的约会,我要留言...
数据库表是这样的:
所有“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,也是)。
但是如果第二个查询的结果也在第一个查询中,我如何比较两个查询并证明?
我也尝试过使用 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)
答案 0 :(得分:0)
无需尝试为您完成所有工作,似乎“WHERE x NOT IN(子查询)”查询应该可以完成这项工作。