Eu criaria uma função simples:
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 ;
que atualiza tabelas e retorna ids concatenados.
Do php você chama isso:
SELECT mydb.updateMytable()
e você obtém ids em um stirng:
1,2,7,54,132
etc... Atualização:
minha função está retornando uma string contendo ids separados por vírgula:
'1,5,7,52,...'
esses ids são apenas os que teriam sido atualizados durante a chamada da função, melhor exemplo de php-mysql seria (você pode e usaria 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";
}
lembre-se também de alterar
mydb
e mytable
de acordo com seus nomes de banco de dados Final
porque você precisa de uma funcionalidade mais complexa, basta executar duas consultas:
Primeira execução:
SELECT a, b, c
FROM mytable
WHERE viewed = 0
Próxima execução:
UPDATE mytable
SET viewed = 1
WHERE viewed = 0