Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql mengembalikan hasil dari pembaruan

Saya akan membuat fungsi sederhana:

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 ;

yang memperbarui tabel dan mengembalikan id gabungan.

Dari php Anda menyebutnya:

SELECT mydb.updateMytable()

dan Anda mendapatkan id dalam kehebohan:1,2,7,54,132 dll...

Pembaruan:

fungsi saya mengembalikan string yang berisi id yang dipisahkan koma:'1,5,7,52,...' id ini hanya yang akan diperbarui selama pemanggilan fungsi,

contoh php-mysql yang lebih baik adalah (Anda mungkin dan akan menggunakan 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";
}

juga ingat untuk mengubah mydb dan mytable sesuai dengan nama database Anda

Akhir

karena Anda memerlukan fungsionalitas yang lebih kompleks, cukup jalankan dua kueri:

Lari pertama:

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

Lari berikutnya:

UPDATE mytable 
    SET viewed = 1 
WHERE viewed = 0



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan id dari baris yang baru saja saya masukkan php/mysql

  2. Memindahkan dan Mencadangkan Database MySQL Besar

  3. Perbarui beberapa tabel dalam satu kueri di mysql

  4. Kesalahan sintaks pada Pemicu MYSQL

  5. NHibernate Tidak dapat mengonversi nilai tanggal/waktu MySQL ke System.DateTime