gpt4 book ai didi

php - MySQL "IF (SELECT is empty) THEN INSERT"- 解决方案

转载 作者:行者123 更新时间:2023-12-01 00:36:14 25 4
gpt4 key购买 nike

我正在开发一种工具来记录 worker 的来去时间。这些时间记录到一个单独的 mysql 表中。

该表有一个 come 和一个 gone 字段,用于记录 worker 何时来或离开。只有当所有“旧”条目都关闭时,才应创建新条目,这意味着该工作人员之前已 checkout 。

我认为它应该是这样的:

   IF EXISTS (  SELECT * FROM tbl_card
WHERE time_gone IS NULL
AND user_id=".$user_id."
)
THEN
BEGIN

END
ELSE BEGIN
INSERT
INTO tbl_card (`user_id`, `time_come`)
VALUES ('2', '2018-01-01 14:00')
END

有谁知道这应该如何工作?

我正在使用 php 查询 mysql。 Php 允许定义“if-conditions”,所以我在 SELECT * FROM tbl_card... 中分离查询并测试 rowcount 是否为“0”然后我执行插入物。

但是:一个用户设法使用第一次和第二次查询之间的微秒来签到两次。 :(

它用于 LAMP 环境。之前是这样的:

  $sql = "SELECT * FROM tbl_card WHERE time_gone IS NULL
AND user_id=".$user_id;
$result = $db_conn->query($sql);

if ($result->num_rows <> 0)
{
return 'You already checked in!';
}
else
{
$sql = "INSERT
INTO tbl_card(`user_id`, `time_come`)
VALUES ('".$user_id."', '".$timestamp."')";

if ($db_conn->query($sql)){
return 'Check in: '.$timestamp;}
else
{
return 'Something strange happend!';
}
}

表格是:

   tbl_card -> id, user_id, time_come, time_gone
tbl_user -> id, name

最佳答案

尝试单次插入/选择:

INSERT INTO card (`user_id`, `time_come`) 
SELECT '2', '2018-01-01 14:00'
WHERE NOT EXISTS
( SELECT * FROM punchclock
WHERE time_gone IS NULL
AND user_id=".$user_id."
)

关于php - MySQL "IF (SELECT is empty) THEN INSERT"- 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49515934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com