sql >> Database teknologi >  >> RDS >> Mysql

mysql returnerer resultater fra opdatering

Jeg ville lave en simpel funktion:

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 ;

som opdaterer tabeller og returnerer sammenkædede id'er.

Fra php kalder du dette:

SELECT mydb.updateMytable()

og du får id'er i en fart:1,2,7,54,132 osv...

Opdatering:

min funktion returnerer streng, der indeholder kommaseparerede id'er:'1,5,7,52,...' disse id'er er kun, som ville være blevet opdateret under funktionskaldet,

bedre php-mysql eksempel ville være (du kan og ville bruge 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";
}

husk også at ændre mydb og mytable i henhold til dine databasenavne

Finale

fordi du har brug for mere kompleks funktionalitet, skal du blot køre to forespørgsler:

Første kørsel:

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

Næste kørsel:

UPDATE mytable 
    SET viewed = 1 
WHERE viewed = 0



  1. Hvad er forskellen mellem primært indeks og sekundært indeks nøjagtigt?

  2. SQL VÆLG AVG

  3. PostgreSQL:hvordan man opdaterer rækker i CTE

  4. Effektiv forespørgsel, tabelbro/indeksering og struktur