如果特定行= null,则执行查询

时间:2010-05-22 18:08:55

标签: mysql

如何检查列的值是否为空,然后才执行查询?例如:

col1 col2 col3
01   abc  

我运行一个查询,首先检查记录是否存在;如果它存在,它应该执行更新查询,如果它不存在,它将执行插入查询。 如何检查col3是否为空,如果为null,则应执行更新查询。

$sql = "SELECT uid FROM `users` WHERE uid = '" . $user_id . "'";
    $result = mysql_query($sql,$conn) or die('Error:' .mysql_error());

    $totalrows = mysql_num_rows($result);
    if($totalrows < 1)
    {
        insertUser($user_id,$sk, $conn);

    }
    else
    {
        updateSessionKey($user_id,$sk,$conn);
    }

3 个答案:

答案 0 :(得分:1)

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

没有真正检查列的值,但我认为你实际上并不需要它。

您需要将uid作为UNIQUE列。您尝试为具有给定uid的新用户插入行;如果它找到具有相同uid的用户,则代之以进行更新。

<强>更新

我猜你没有费心去阅读链接。

我没有测试它,但它应该是这样的:

INSERT INTO users (uid, name, session)
VALUES ('login', 'Real Name', 'SeSsIoN_iD')
ON DUPLICATE KEY UPDATE session='SeSsIoN_iD'

如果用户不存在,这将插入用户,如果他不存在,则会设置新的会话密钥。或者,如果你想保留旧的会话密钥,如果他已经有一个,

INSERT INTO users (uid, name, session)
VALUES ('login', 'Real Name', 'SeSsIoN_iD')
ON DUPLICATE KEY UPDATE session=IFNULL(session, 'SeSsIoN_iD')

一个查询,而不是三个。你已经在做了。

答案 1 :(得分:0)

$sql = "SELECT * FROM `users` WHERE uid = '" . $user_id . "'";
$result = mysql_query($sql,$conn) or die('Error:' .mysql_error());

$totalrows = mysql_num_rows($result);
if($totalrows < 1)
{
    $res = mysql_fetch_array($sql);

    if(!empty($res['col3'])) {

         insertUser($user_id,$sk, $conn);

    }

}
else
{
    updateSessionKey($user_id,$sk,$conn);
}

答案 2 :(得分:-1)

这是你的意思吗?

  • 如果记录不存在 - &gt;插入
  • 如果记录确实存在且col3为空 - >更新
  • 如果记录确实存在,但其col3不为null - &gt;什么都不做?

这可以像这样(未经测试)实现:

$sql = "SELECT uid, col3 FROM `users` WHERE uid = '" . $user_id . "'";
$result = mysql_query($sql,$conn) or die('Error:' .mysql_error());

$totalrows = mysql_num_rows($result);
if($totalrows < 1)
{
    insertUser($user_id,$sk, $conn);
}
else
{
    $col3value = mysql_result($result, 0, 'col3');
    if (is_null($col3value))
    {
        updateSessionKey($user_id,$sk,$conn);
    }
}