sql >> Database >  >> RDS >> Mysql

mysql retourneert resultaten van update

Ik zou een eenvoudige functie maken:

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 bijwerkt en aaneengeschakelde id's retourneert.

Vanuit php noem je dit:

SELECT mydb.updateMytable()

en je krijgt id's in een opwelling:1,2,7,54,132 enz...

Bijwerken:

mijn functie retourneert een tekenreeks met door komma's gescheiden id's:'1,5,7,52,...' deze id's zijn alleen die zouden zijn bijgewerkt tijdens de functie-aanroep,

een beter php-mysql-voorbeeld zou zijn (je mag en zou PDO gebruiken):

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

vergeet ook niet om mydb te wijzigen en mytable volgens uw databasenamen

Finale

omdat u meer complexe functionaliteit nodig heeft, voert u gewoon twee query's uit:

Eerste run:

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

Volgende uitvoering:

UPDATE mytable 
    SET viewed = 1 
WHERE viewed = 0



  1. Inleiding tot FORALL-instructie in Oracle Database

  2. Hoe gebruik je union slechts één keer met waar commando?

  3. Som kolommen of nieuwe kolom

  4. Geautomatiseerd testen van PostgreSQL-back-ups