检查一个表中的记录是否存在于另一个表中并禁用选项

问题描述 投票:0回答:1

尝试 - 返回所有报告日期=当前周的注册。

SELECT * FROM registrations LEFT JOIN reports on registrations.registration=reports.registration WHERE  reports.reportDate between cast(timestampadd(SQL_TSI_DAY, -(dayofweek(curdate())-2), curdate()) as date) and cast(timestampadd(SQL_TSI_DAY, 7-(dayofweek(curdate())-1), curdate()) as date)

我想实现以下功能,但我不知道如何使用PHP来实现。

首先,从Registrations表中获取所有“registration”,

然后检查Reports 表中是否存在注册,其中reportDate 等于当前WEEK

(即当前周为周一至周日,今天的时间和日期等于 8 月 26 日至 9 月 1 日)。

最后,在选择输入中显示所有注册(必须回显,因为选择输入位于 html 文件的更下方),并且报告日期 = 本周的注册,使它们可见但禁用。

报名

id 注册
1 示例
2 示例2
3 示例3

报告

id 注册 报告日期
1 示例 2024-08-19
2 示例 2024-08-22
3 示例2 2024-08-22
4 示例3 2024-08-22
5 示例 2024-08-27
6 示例3 2024-08-27

在上面的示例中,“EXAMPLE”和“EXAMPLE3”注册应该可见但被禁用,并且“EXAMPLE2”应该根据发布时间和该问题的当前周在选择字段中单击。结果应该像下面的代码

<select oncopy="return false" id="inspectReg" name="inspectReg" class="reg-control">
*Somewhat...a for each loop? or while?*
<option value="EXAMPLE" disabled>EXAMPLE</option> (record exists dated 27th - so disabled)
<option value="EXAMPLE2">EXAMPLE2</option> (record for current week does not exist)
<option value="EXAMPLE3" disabled>EXAMPLE3</option> (record exists dated 27th - so disabled)
</select>
php sql mysql
1个回答
0
投票

你可以试试这个吗

SELECT r.registration, CASE WHEN rp.registration IS NOT NULL THEN 'disabled' ELSE '' END AS status FROM registrations r LEFT JOIN reports rp ON r.registration = rp.registration AND rp.reportDate BETWEEN CAST(TIMESTAMPADD(DAY, -(DAYOFWEEK(CURDATE())-2), CURDATE()) AS DATE) AND CAST(TIMESTAMPADD(DAY, 7-(DAYOFWEEK(CURDATE())-1), CURDATE()) AS DATE);
© www.soinside.com 2019 - 2024. All rights reserved.