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

Rozlišujte mezi „žádné řádky nebyly ovlivněny“ a řádky úspěšně AKTUALIZOVANÉ – na stejnou hodnotu (MySQL a PHP)

Jednoduchým řešením by byly dva dotazy.

Nejprve spusťte dotaz SELECT a pomocí mysqli_num_rows() zkontrolujte, zda řádek existuje.

Pak, pokud řádek existuje, můžete spustit dotaz UPDATE a použít mysqli_affected_rows().

[UPRAVIT]

...navrhnu potenciální alternativu pro každého, kdo hledá jediný hovor. Nevím, jestli máte zájem dělat nějaké INSERTy, nebo čistě UPDATE. Níže je několik podnětů k zamyšlení:

Z horního komentáře @ http://php.net/manual/en/ mysqli.affected-rows.php :

U dotazů „INSERT INTO ON DUPLICATE KEY UPDATE“ lze sice očekávat, že ovlivněné_řádky vrátí pouze 0 nebo 1 na řádek při úspěšných dotazech, ve skutečnosti může vrátit 2.

Z manuálu Mysql:"S ON DUPLICATE KEY UPDATE je hodnota ovlivněných řádků na řádek 1, pokud je řádek vložen jako nový řádek, a 2, pokud je aktualizován existující řádek."

Viz:http://dev.mysql.com /doc/refman/5.0/en/insert-on-duplicate.html

Zde je rozpis součtů na řádek :

+0:​​řádek nebyl aktualizován nebo vložen (pravděpodobně proto, že řádek již existoval, ale během AKTUALIZACE nebyly ve skutečnosti změněny žádné hodnoty pole)

+1:byl vložen řádek

+2:řádek byl aktualizován

Dokážete to přizpůsobit svým potřebám?




  1. Proč iterace přes velký Django QuerySet spotřebovává obrovské množství paměti?

  2. MySQL Group_Concat() vs T-SQL String_Agg()

  3. Najděte jiné znaky než ASCII ve sloupcích varchar pomocí SQL Server

  4. Cena Oracle In-Memory