当一次插入多条记录时,Mysql子查询返回的行数超过1

xiozqbni  于 2024-01-05  发布在  Mysql
关注(0)|答案(1)|浏览(150)

我在dr_scan表中有scan_freq列。我试图将记录插入dr_scan表,如果有任何重复的值,它将把重复的行scan_freq列改为0,否则它保持1。
所以我开发了下面提到的代码,它像我预期的那样工作。但是当我试图一次插入多个记录时,它会返回“subquery returns more than 1 row when insert multiple records at once”

  1. if ($savec == "confirm")
  2. {
  3. $checkIfExistsQuery = "SELECT COUNT(*) as count FROM dr_scan WHERE barcode = (SELECT barcode FROM temp_scan_save WHERE user_id='$user_id' )";
  4. $checkResult = mysqli_query($conn, $checkIfExistsQuery);
  5. $rowCount = mysqli_fetch_assoc($checkResult)['count'];
  6. if ($rowCount > 0)
  7. {
  8. $updateSql = "UPDATE dr_scan SET scan_freq = 0 WHERE barcode = (SELECT barcode FROM temp_scan_save WHERE user_id='$user_id' )";
  9. $updateResult = mysqli_query($conn, $updateSql);
  10. }
  11. $insertSql = "INSERT INTO dr_scan (barcode, machine_type, line, date, user_id, device_id, center, mstatus, mstatus_changed, live_status, transfer_status, scan_freq) SELECT barcode, machine_type, line, date, user_id, device_id, center, mstatus, mstatus_changed, live_status, transfer_status, 1 as scan_frequency FROM temp_scan_save WHERE user_id='$user_id'";
  12. $insertResult = mysqli_query($conn, $insertSql);
  13. if (isset($updateResult) && $updateResult && isset($insertResult) && $insertResult)
  14. { $response = array("response" => "success"); echo json_encode($response);
  15. } else
  16. {
  17. $response = array("response" => "failure"); echo json_encode($response);
  18. }
  19. $sql2 = "DELETE FROM temp_scan_save WHERE user_id='$user_id' "; $result2 = mysqli_query($conn, $sql2); }
  20. else { }
  21. mysqli_close($conn);

字符串

y0u0uwnf

y0u0uwnf1#

假设barcodedr_scan中的唯一键,您可以使用一个IODKU和一个DELETE语句。您应该使用prepared statements而不是将字符串连接在一起。

  1. if ($savec == 'confirm') {
  2. $insertSql = <<<'SQL'
  3. INSERT INTO dr_scan (barcode, machine_type, line, date, user_id, device_id, center, mstatus, mstatus_changed, live_status, transfer_status, scan_freq)
  4. SELECT barcode, machine_type, line, date, user_id, device_id, center, mstatus, mstatus_changed, live_status, transfer_status, 1 as scan_frequency
  5. FROM temp_scan_save
  6. WHERE user_id = ?
  7. ON DUPLICATE KEY UPDATE scan_freq = 0
  8. SQL;
  9. $insertResult = $conn->execute_query($insertSql, [$user_id]);
  10. echo json_encode(['response' => ($insertResult ? 'success' : 'failure')]);
  11. $conn->execute_query('DELETE FROM temp_scan_save WHERE user_id = ?', [$user_id]);
  12. } else {}

字符串

展开查看全部

相关问题