Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql trả về kết quả từ bản cập nhật

Tôi sẽ tạo một hàm đơn giản:

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 ;

cập nhật các bảng và trả về các id được nối.

Từ php, bạn gọi cái này:

SELECT mydb.updateMytable()

và bạn nhận được id một cách lộn xộn:1,2,7,54,132 vv ...

Cập nhật:

hàm của tôi trả về chuỗi chứa các id được phân tách bằng dấu phẩy:'1,5,7,52,...' những id này chỉ được cập nhật trong quá trình gọi hàm,

ví dụ php-mysql tốt hơn sẽ là (bạn có thể và sẽ sử dụng 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";
}

cũng nhớ thay đổi mydbmytable theo tên cơ sở dữ liệu của bạn

Cuối cùng

bởi vì bạn cần chức năng phức tạp hơn, chỉ cần chạy hai truy vấn:

Lần chạy đầu tiên:

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

Lần chạy tiếp theo:

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. Lấy dữ liệu từ hai bảng được liên kết với khóa forign trong CakePhp

  2. CakePHP 3 - Liên kết bảng DB với chính nó

  3. Quyền truy cập bị từ chối đối với người dùng 'www-data' @ 'localhost - làm thế nào để đối phó với điều đó?

  4. Làm thế nào để xử lý các phiên trên các thiết bị khác nhau?

  5. Chế nhạo truy vấn chèn vào Cơ sở dữ liệu MySQL bằng Moq