sql >> データベース >  >> RDS >> Mysql

mysqlは更新から結果を返します

    簡単な関数を作成します:

    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 ;
    

    テーブルを更新し、連結されたIDを返します。

    PHPからこれを呼び出します:

    SELECT mydb.updateMytable()
    

    そして、あなたは攪拌でIDを取得します:1,2,7,54,132 など...

    更新:

    私の関数は、コンマ区切りのIDを含む文字列を返しています:'1,5,7,52,...' これらのIDは、関数呼び出し中に更新されたもののみです。

    より良いphp-mysqlの例は次のようになります(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";
    }
    

    mydbも忘れずに変更してください およびmytable データベース名によると

    最終

    より複雑な機能が必要なため、2つのクエリを実行するだけです。

    初回実行:

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

    次の実行:

    UPDATE mytable 
        SET viewed = 1 
    WHERE viewed = 0
    



    1. count関数を使用して、ifステートメントに何が表示されるかを判別します

    2. SQLite Length()のしくみ

    3. ClientDataSetTBCDFieldの丸め

    4. Oracle-文字列のカンマ区切りを分割します(文字列にはスペースと連続したカンマが含まれます)