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

DelphiのMySQLのRand()関数の構文エラー

    まず、RAND()を使用していません 正しく。 10進数を返します0 <= N < 1 。入力値はシードであり、期待しているような上限ではありません。 0 <= N < Countの間のランダムな整数を取得するには 、結果を倍数にする必要があります。つまり、RAND()*Count 、あなたはしていません。ただし、これを行う必要はありません。RAND()を使用するだけです。 それ自体では、最初にレコード数を照会する必要はありません:

    qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic" ORDER BY RAND() LIMIT 1';
    qryCards.Open;
    ShowMessage(qryCards.FieldByName('Card_Name').AsString);
    

    それ以外の場合は、LIMITへのオフセットを指定してランダムレコードを選択できます 句、例:

    qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic"';
    qryCards.Open;
    iCount := qryCards.RecordCount;
    qryCards.Close;
    qryCards.SQL.Text := 'SELECT * FROM tblCards WHERE Card_Rarity = "Epic" LIMIT ' + IntToStr(Random(iCount)) + ', 1');
    qryCards.Open;
    ShowMessage(qryCards.FieldByName('Card_Name').AsString);
    

    テーブルにギャップのない自動インクリメントIDフィールドがある場合は、RAND()を使用できる他の手法があります。 と。 MySQL Select RandomRecords を参照してください。 例として。




    1. .netエンティティフレームワークとOracle11g

    2. 一連の日付の生成

    3. TSQLコードからWebサービスを呼び出すことはできますか?

    4. Mysqlで最後に更新された行ID