php - 如果不存在不同的结果,则插入到表中

标签 php mysql insert

我有一个像这样的“用户”SQL 表结构(ID 是随机生成的,不是自动递增的):

ID    name     deleted    lastActive
3242  Joe      0          20-6-2012 23:14
2234  Dave     0          20-6-2012 23:13
2342  Simon    1          20-6-2012 23:02
9432  Joe      1          20-6-2012 22:58

可以有多个已删除(deleted=1)的同名用户,但只有 1 个未删除的同名用户(所以加 Simon 没问题,但 Dave 不行)。如何仅在一个 SQL 查询中没有同名且 deleted=0 的记录时才插入?我需要这样的东西:

INSERT INTO users (ID, name) VALUES ($id, $name) 
    WHERE NOT EXISTS (SELECT 1 FROM users WHERE name = $name AND deleted = 0)

但这不是正确的语法。

最佳答案

用 LEFT JOIN 设置

  • 子查询 A 包含别名为 ID 的随机数和别名为 name 的 $name。
  • 子查询 B 选择未删除的 name = $name。
  • LEFT JOIN A 到 B 并返回 A.* 如果它没有 LEFT JOIN 的右侧对应物

这是查询

INSERT INTO users (ID,name)
SELECT A.* FROM
(SELECT RAND() ID,'$name' name) A LEFT JOIN
(SELECT name FROM users WHERE name='$name' AND deleted=0) B
USING (name) WHERE B.name IS NULL;

关于php - 如果不存在不同的结果,则插入到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145600/

相关文章:

php - 启动一个有循环的 Linux 作业

php - 如何更新 Web 应用程序以更改 mysql 数据库?

php - 允许创建自定义表单并存储数据

java - 迭代单链表中的节点以获取字符串输入

来自 Oracle 中 dblink 等待事件的 SQL*Net 消息

PHP函数问题

php - 如何在 Bootstrap 模式(或对话框)和 codeigniter 内查询数据库

mysql - 通过文本文件将数据加载到 mySQL 中

MYSQL查询左连接显示一个表中的所有数据

php - 通过php从textarea字段的每一行插入数据库