Creerei una semplice funzione:
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 ;
che aggiorna le tabelle e restituisce ID concatenati.
Da php chiami questo:
SELECT mydb.updateMytable()
e ottieni ID in un attimo:1,2,7,54,132
ecc...
Aggiornamento:
la mia funzione restituisce una stringa contenente ID separati da virgole:'1,5,7,52,...'
questi ID sono solo quelli che sarebbero stati aggiornati durante la chiamata di funzione,
un esempio migliore di php-mysql sarebbe (potresti e useresti 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";
}
ricorda anche di cambiare mydb
e mytable
in base ai nomi del tuo database
Finale
poiché hai bisogno di funzionalità più complesse, esegui semplicemente due query:
Prima esecuzione:
SELECT a, b, c
FROM mytable
WHERE viewed = 0
Prossima corsa:
UPDATE mytable
SET viewed = 1
WHERE viewed = 0