簡単な関数を作成します:
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
など...
更新:
私の関数は、コンマ区切りの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
も忘れずに変更してください およびmytable
データベース名によると
最終
より複雑な機能が必要なため、2つのクエリを実行するだけです。
初回実行:
SELECT a, b, c
FROM mytable
WHERE viewed = 0
次の実行:
UPDATE mytable
SET viewed = 1
WHERE viewed = 0