Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql gibt Ergebnisse von update zurück

Ich würde eine einfache Funktion erstellen:

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 ;

die Tabellen aktualisiert und verkettete IDs zurückgibt.

Von PHP aus rufen Sie dies auf:

SELECT mydb.updateMytable()

und Sie erhalten IDs in einem Rührwerk:1,2,7,54,132 usw...

Aktualisierung:

Meine Funktion gibt eine Zeichenfolge zurück, die durch Kommas getrennte IDs enthält:'1,5,7,52,...' diese IDs sind nur die, die während des Funktionsaufrufs aktualisiert worden wären,

Ein besseres PHP-Mysql-Beispiel wäre (Sie können und würden PDO verwenden):

$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";
}

Denken Sie auch daran, mydb zu ändern und mytable nach Ihren Datenbanknamen

Ende

Da Sie komplexere Funktionen benötigen, führen Sie einfach zwei Abfragen aus:

Erster Lauf:

SELECT a, b, c
FROM mytable
WHERE viewed = 0

Nächste Ausführung:

UPDATE mytable 
    SET viewed = 1 
WHERE viewed = 0