Tôi sẽ tạo một hàm đơn giản:
DELIMITER $$
DROP FUNCTION IF EXISTS `mydb`.`updateMytable`$$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
FUNCTION `mydb`.`updateMytable`() RETURNS TEXT
BEGIN
SET @updated := '';
UPDATE mytable
SET viewed = 1
WHERE viewed = 0
AND (
SELECT @updated := CONCAT_WS(',', @updated, id)
) != ''
;
RETURN TRIM(LEADING ',' FROM @updated);
END$$
DELIMITER ;
cập nhật các bảng và trả về các id được nối.
Từ php, bạn gọi cái này:
SELECT mydb.updateMytable()
và bạn nhận được id một cách lộn xộn:1,2,7,54,132
vv ...
Cập nhật:
hàm của tôi trả về chuỗi chứa các id được phân tách bằng dấu phẩy:'1,5,7,52,...'
những id này chỉ được cập nhật trong quá trình gọi hàm,
ví dụ php-mysql tốt hơn sẽ là (bạn có thể và sẽ sử dụng PDO):
$query = "SELECT mydb.updateMytable()";
$res = mysql_query($query);
$arr = mysql_fetch_array($res);
$ids = explode(',', $arr[0]);
// now you can do whatever you want to do with ids
foreach ($ids as $id)
{
echo "Hoorah: updated $id\n";
}
cũng nhớ thay đổi mydb
và mytable
theo tên cơ sở dữ liệu của bạn
Cuối cùng
bởi vì bạn cần chức năng phức tạp hơn, chỉ cần chạy hai truy vấn:
Lần chạy đầu tiên:
SELECT a, b, c
FROM mytable
WHERE viewed = 0
Lần chạy tiếp theo:
UPDATE mytable
SET viewed = 1
WHERE viewed = 0