我会创建一个简单的函数:
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 ;
它更新表并返回串联的 id。
在 php 中你可以这样称呼:
SELECT mydb.updateMytable()
你会得到字符串中的 id:1,2,7,54,132
etc...
Update:
我的函数返回包含逗号分隔 ID 的字符串:'1,5,7,52,...'
这些 id 只是在函数调用期间更新的,
更好的 php-mysql 示例是(您可能并且会使用 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";
}
也记得改变mydb
and mytable
根据您的数据库名称
Final
因为您需要更复杂的功能,只需运行两个查询:
第一次运行:
SELECT a, b, c
FROM mytable
WHERE viewed = 0
下次运行:
UPDATE mytable
SET viewed = 1
WHERE viewed = 0