sql >> Databáze >  >> RDS >> Mysql

mysql vrátí výsledky z aktualizace

Vytvořil bych jednoduchou funkci:

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 ;

který aktualizuje tabulky a vrací zřetězená ID.

Z php to nazýváte:

SELECT mydb.updateMytable()

a získáte ID najednou:1,2,7,54,132 atd...

Aktualizace:

moje funkce vrací řetězec obsahující ID oddělená čárkami:'1,5,7,52,...' tato ID jsou pouze ta, která by byla aktualizována během volání funkce,

lepší příklad php-mysql by byl (můžete a použijete 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";
}

nezapomeňte také změnit mydb a mytable podle názvů vaší databáze

Konečný

protože potřebujete složitější funkce, jednoduše spusťte dva dotazy:

První spuštění:

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

Další spuštění:

UPDATE mytable 
    SET viewed = 1 
WHERE viewed = 0



  1. Instalace Magento si stěžuje na chybějící InnoDB, když je k dispozici

  2. znak k dnešnímu dni v oracle sql

  3. MySQL 5.7 RAND() a IF() bez LIMIT vede k neočekávaným výsledkům

  4. Můžeme použít příkazy DDL v připraveném příkazu (PostgreSQL)?