0

MySql データベースのフィールドから int の値を取得し、新しいレコードが追加されたときに値を 1 増やしようとしています。何が起こっているかというと、レコードが挿入されると、フィールドの値に 1 が追加されず、1 が追加されます。たとえば、最後のレコードの値は 10 であるため、クエリを実行した後の値は 11 になります。

これが機能しない理由を理解するのに苦労しており、私のコードを機能するソリューションに修正する方法についてアドバイスをいただければ幸いです。どうもありがとう

phpコード

function get_ref(){
     $query = "SELECT MAX(`id_usr`) AS `max` FROM `user_usr`";
     $result = mysql_query($query) or die(mysql_error());
     $row = mysql_fetch_assoc($result);
     $max = $row['max'];    

    $sql = 'select idcom_usr'           
    . ' from user_usr'
    . " where id_usr = '$max'"
    . ' order '
    . ' by id desc'
    . " limit 1";
    $result = mysql_query($sql);
    $ref = mysql_result($result,0,"idcom_usr");
    return $ref + 1;

    }           
4

2 に答える 2

3

列を自動インクリメントできます。このようにして、作業を PHP から MySQL にオフロードします。これは常に良いことです。

そうそう、そして、新しいコードで関数を使用しないでくださいmysql_*。それらはもはや保守されておらず、公式に非推奨です赤いボックスが見えますか? 代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを決定するのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。

于 2013-06-07T09:30:42.570 に答える
2

トリガーを使用して目標の達成を試みることができます

CREATE TRIGGER tg_user_usr_insert
BEFORE INSERT ON user_usr
FOR EACH ROW
    SET NEW.idcom_usr = (SELECT COALESCE(MAX(idcom_usr), 0) + 1 FROM user_usr);

次に、新しい行を挿入すると

INSERT INTO user_usr (idcom_usr) VALUES (0),(0);

の値idcom_usrはトリガーによって割り当てられます。

これがSQLFiddle のデモです。

何らかの理由で2つのクエリではなくphpで実行したとしても、必要なのは1つだけです

SELECT COALESCE(MAX(idcom_usr), 0) + 1 next_value 
  FROM user_usr

注: このアプローチは、同時実行による負荷が高い場合にエラーが発生しやすくなります。

于 2013-06-07T11:04:32.213 に答える