gpt4 book ai didi

mysql - 是否有可能知道导致UPDATE“WHERE”语句不进行第二次查询就不会更新的原因?

转载 作者:行者123 更新时间:2023-11-29 15:42:13 25 4
gpt4 key购买 nike

我有一个Joomla数据库查询(mysql),如果满足所有3个WHERE子句,它将更新数据库中的某些内容。我想知道是否有办法从更新mysql查询中提取更新失败的“ WHERE”语句?

我之所以这样问是因为,如果COUNT = 1(这意味着数据库已经更新并且什么也不会发生),我想传达一个错误,例如“之前已更新”,而不是“未更新”。

如果更新查询失败,我当然可以进行选择查询,但这意味着要进行第二次查询,我只是想知道是否对此问题有更优雅的解决方案。也许我没有听说过的sql函数或其他。所以我可以只用一个数据库查询。

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->update($db->quoteName('#__table'));
$query->set($db->quoteName('field1') . ' = ' . $db->quote($value1))
->set($db->quoteName('field2') . ' = ' . $db->quote($value2));
if ($value3 !="") {
$query->set($db->quoteName('field3') . ' = ' . $db->quote($value3));
}
$query->where($db->quoteName('id') . ' = ' . $db->quote($rowid))
->where($db->quoteName('talentuid') . ' = ' . $db->quote($tid))
->where($db->quoteName('count') . ' = ' . $db->quote(0));
$db->setQuery($query);
$result = $db->execute();
// Check for affected rows.
if ($db->getAffectedRows() > 0) {
return '{"success": "true"}';
} else {
return '{"success": "false"}';
}

最佳答案

我看不到任何光滑的单程到数据库完成此操作。

好消息是,它仅有条件地两次到达服务器。

未经测试的脚本:

$db = JFactory::getDbo();
$table = $db->qn('#__table');
$conditions = [$db->qn('id') . ' = ' . (int)$rowid,
$db->qn('talentuid') . ' = ' . (int)$tid]
$select = $db->getQuery(true)
->select($db->qn('count'))
->from($table)
->where($conditions);
$db->setQuery($select);
$result = $db->loadResult();
if ($result === null) {
// ids not found
// INSERT if appropriate
$outcome = ['success' => 'missing'];
} elseif ($result) {
// count column value is not zero
// already up to date, do nothing more
$outcome = ['success' => 'ignored'];
} else {
// count column value is zero
$newData = [$db->qn('field1') . ' = ' . $db->q($value1),
$db->qn('field2') . ' = ' . $db->q($value2)];
if ($value3) {
$newData[] = $db->qn('field3') . ' = ' . $db->q($value3);
}
$update = $db->getQuery(true)
->update($table)
->set($newdata)
->where($conditions);
$db->setQuery($update);
$db->execute();
$outcome = ['success' => $db->getAffectedRows() ? "true" : "false"]);
}
return json_encode($outcome);


以上与 https://joomla.stackexchange.com/a/22985/12352相似。

关于mysql - 是否有可能知道导致UPDATE“WHERE”语句不进行第二次查询就不会更新的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57493126/

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