使用 mysqli 在同一查询中选择和插入/更新

Posted

技术标签:

【中文标题】使用 mysqli 在同一查询中选择和插入/更新【英文标题】:SELECT and INSERT/UPDATE within the same query using mysqli 【发布时间】:2013-02-03 14:06:27 【问题描述】:

我在徘徊是否可以先 SELECT 并且如果不是真的 INSERT 在使用 mysqli 的同一查询中插入 db?

这是我现在的做法:

$sel_timestamp = mktime(0, 0, 0, date("n"), date("j")-$day, date("Y"));
$sel_tag = date("Y-m-d",$sel_timestamp);
$user = 1;

if ($result = $mysqli->query("SELECT * FROM ".$prefix."_active_users WHERE userid = $user AND DATE(timestamp) = '$sel_tag'"))

    if($result->num_rows < 1)

        $insert = "INSERT INTO ".$prefix."_active_users (userid,timestamp) VALUES (?,?)";
        $stmt = $mysqli->stmt_init();

        if($stmt->prepare($insert))
            $stmt->bind_param('is', $user,$sel_tag);
            $stmt->execute();

            $stmt->close(); 
        
    
    $result->close();

在我的情况下,我使用了 2 个查询,但是否可以将其合并为一个?

提前致谢!

【问题讨论】:

table schema of "$prefix."_active_users。为什么要针对用户 ID 插入时间戳 它用于统计...活跃的独立用户公关。天。表架构:userid int(11) NO MUL NULL timestamp timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP 令人困惑...看不懂。 调用存储过程怎么样?? 【参考方案1】:

如果你有一个 UNIQUE KEY (userid,timestamp),那么你可以使用

INSERT IGNORE INTO ".$prefix."_active_users (userid,timestamp) VALUES (?,?)

忽略是一个关键词

但是,您可以保持当前代码不变。有 2 个查询也没有错。

【讨论】:

我正在尝试优化我的网站,但我有很多查询,,,您的示例如何获得 SELECT 查询的 rit?

以上是关于使用 mysqli 在同一查询中选择和插入/更新的主要内容,如果未能解决你的问题,请参考以下文章

PHP mysqli_fetch_array() 不会在 while 循环中将所有选择查询插入到表中

Mysqli多行插入,简单的多插入查询

PHP MYSQLI 查询

mysqli多行插入,简单多插入查询

php MySQLi插入,更新和删除

Mysqli查询功能插入重复行