Бих създал проста функция:
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 ;
който актуализира таблици и връща свързани идентификатори.
От php извиквате това:
SELECT mydb.updateMytable()
и получавате идентификатори в стринг:1,2,7,54,132
и т.н...
Актуализация:
моята функция връща низ, съдържащ идентификатори, разделени със запетая:'1,5,7,52,...'
тези идентификатори са само тези, които биха били актуализирани по време на извикването на функцията,
по-добър пример за 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
според имената на вашата база данни
Окончателно
тъй като имате нужда от по-сложна функционалност, просто изпълнете две заявки:
Първо изпълнение:
SELECT a, b, c
FROM mytable
WHERE viewed = 0
Следващо изпълнение:
UPDATE mytable
SET viewed = 1
WHERE viewed = 0