Saya menggunakan mysql dan saya perlu entah bagaimana menggunakan kolom curid yang dikembalikan oleh pernyataan yang disiapkan dalam permintaan nanti. Saya menggunakan pernyataan yang telah disiapkan karena seperti yang saya baca, ini adalah satu-satunya cara untuk meneruskan variabel ke klausa LIMIT. Saya memiliki prosedur tersimpan ini di sini:
DROP PROCEDURE IF EXISTS fixbalance;
CREATE PROCEDURE fixbalance (userid INT)
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE balance INT DEFAULT 0;
DECLARE idcnt INT;
SET idcnt = (SELECT COALESCE(COUNT(id), 0)
FROM coupon_operations
WHERE user_id = userid);
IF idcnt <> 0 THEN
WHILE i <= idcnt DO
BEGIN
SET @iter = i;
SET @user_id = userid;
SET @sql = CONCAT('SELECT id AS curid
FROM coupon_operations
WHERE user_id = ?
ORDER BY id ASC
LIMIT ?, 1');
PREPARE stmt FROM @sql;
EXECUTE stmt USING @user_id, @iter;
DEALLOCATE PREPARE stmt;
SET balance = balance + (SELECT points
FROM coupon_operations
WHERE user_id = @user_id
AND id = @curid);
UPDATE coupon_operations SET balance = balance;
SET i = i + 1;
END;
END WHILE;
END IF;
END;
|
Ini tidak berfungsi - Saya tidak yakin bagaimana cara melewatkan curid.
CONCAT
kode di atas?