我有一个简单的数据库结构如下:
id group stat
123 abc 1
345 fdg 0
我需要先检查数据库中是否存在重复的“id”。如果没有重复,则可以插入新行。如果存在重复的“id”,我需要检查“stat”是 1 还是 0。如果“stat”设置为 0,我什么也不想做。如果“stat”设置为 1,我想插入一个新行,重复的“id”是可以的,因为用户可以在多个组中。
我是一个完整的菜鸟,所以任何帮助表示赞赏。
你在找这个吗?
INSERT INTO Table1
SELECT 123, 'def', 1
FROM Table1
WHERE
(
SELECT COUNT(*)
FROM table1
WHERE id = 123 AND stat = 1
) > 0
LIMIT 1;
这是SQLFiddle演示。请注意,一秒钟INSERT
不会发生。
像这样的声明将符合您的规范:
INSERT INTO `mytable` (`id`, `group`, `stat`)
SELECT 345 AS `id`
, 'foo' AS `group`
, 1 AS `stat`
FROM DUAL
WHERE NOT EXISTS
( SELECT 1
FROM `mytable` d
WHERE ( d.id = 345 AND d.stat = 1 AND d.group = 'foo' )
OR ( d.id = 345 AND d.stat = /*constant*/ 0 )
)
请注意,在NOT EXISTS
子查询中,相等谓词右侧指定的所有值都是插入的相同值('345','foo','1'),除了常量0
(在检查OR 部分中的 d.stat。)
(请注意,stat=0
如果有stat=1
相同的行,这确实允许插入一行id
。我相信这种行为符合规范,但我在那里看到了一些解释的空间。我假设 (id,group ,stat) 应该是唯一的(应该没有重复),并且 if (id,stat=0) 的组合也应该是唯一的。
您可以通过检查返回的受影响行数来确定是否插入了行。
在插入中执行重复检查有一些好处:
包含一条关于 SQL 语句应该做什么的评论将对未来的读者非常有益。
您可以使用此查询来检查重复项(将 ? 替换为您正在检查的 id),然后查询 count 变量以继续您的逻辑。
select id, count(*) as count
from table
where id = ?
group by id
having count > 1
添加伪php代码以完成:
<?php
$specifiedId = '123'
$query = "select id, count(*) from table where id =".$specifiedId."group by id having count(*) > 1"
$result = $mysqli->query($query);
if($result->num_rows == 0){
//insert new record
}else{
$query2 = "select * from table where stat = 1 and id = ".$specifiedId;
$result = $mysqli->query($query2);
if($result->num_rows > 0){
//insert new record
}
}
?>
希望这可以帮助!
INSERT INTO (id,group,stat) VALUES (,,) ON DUPLICATE KEY ;
你也可以使用上面的case语句
SELECT CASE 1 WHEN 1 THEN 'one' -> WHEN 2 THEN 'two' ELSE 'more' END; -> 'one' mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; -> 'true' mysql> SELECT CASE BINARY 'B' -> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END; -> 空
我没有安装 mysql,所以请尝试这个并发布它是否有效。谢谢 !
你可以这样
select * from taske3 where emp_id=$employee_id AND taskdate=$date ;
$num_of_rows = query_rows ;
if(num_of_rows == 1){
echo "time for the particular project at the given date is already inserted";
}
else {
insert into task3 ('e_id','project','task','time','taskdate') VALUES
('$employee_id','$projectassignedto','2','$date');
}
通过运行 select query 检查条目存在的位置。计算行数,如果条目退出计数将为1,否则为0,然后您可以相应地将数据输入数据库