0

クエリを作成するためにあなたの助けが必要です。私はソフトウェアのキャリアが初めてで、Windows Mobile アプリケーション用の KBC タイプのクイズ ゲームを開発しようとしています。そのために、データベースからランダムなレコードを取得しようとします.1つのレコードが一度に表示されると、そのレコードは再び表示されなくなります. このクエリを使用します"SELECT TOP 1 * FROM Quiz ORDER BY NEWID()"が、レコードが繰り返されます。

私のテーブル構造を以下に示します。

ColumnName  DataType

Id          int
Que         varchar(150)
Ans1        varchar(100)
Ans2        varchar(100)
Ans3        varchar(100)
TrueAns     varchar(100)

以下に示すストアプロシージャも作成しようとしています

DECLARE @counter int, @randno int, @uBound int, @lBound int


        SELECT @uBound = Max(Id) FROM Quiz
        SELECT @lBound = Min(Id) FROM Quiz

        SELECT @randno = Round(((@uBound - @lBound) * Rand() + @lBound), 0)
        SET @Counter = 0

        WHILE @counter = 0
        BEGIN
            IF EXISTS(SELECT Id FROM Quiz WHERE Id = @randno)
            BEGIN
                SET NOCOUNT OFF
                SELECT * FROM Quiz WHERE Id = @randno
                SET @counter = 1
            END
            ELSE
            BEGIN
                SELECT @randno = Round(((@uBound - @lBound -1 ) * Rand() + @lBound), 0)
            END
        END

しかし、私は成功を収めることができません。私のテーブルには、このフィールド Que、Ans1、Ans2、Ans3、TrueAns が含まれています。この問題を解決してください。そして、すべてのレコードを返す Web サービスも作成したい

4

1 に答える 1

1

Quiz isread に bool として列を追加し、デフォルトの false として設定するだけです

次に、ストアドプロシージャを作成して、Webサービスアプローチに進むのに役立つようにします

DECLARE @counter int, @randno int, @uBound int, @lBound int


        SELECT @uBound = Max(Id) FROM Quiz
        SELECT @lBound = Min(Id) FROM Quiz

        SELECT @randno = Round(((@uBound - @lBound) * Rand() + @lBound), 0)
        SET @Counter = 0

        WHILE @counter = 0
        BEGIN


If(( select count(*) from Quiz where isread= true)=( select count(*) from Quiz ))
BEGIN
 update Quiz SET isread=false  
End

            IF EXISTS(SELECT Id FROM Quiz WHERE Id = @randno and isread=false )
            BEGIN
            update Quiz SET isread=true  WHERE Id = @randno                   
            SET NOCOUNT OFF
                SELECT * FROM Quiz WHERE Id = @randno

                SET @counter = 1
            END
            ELSE
            BEGIN
                SELECT @randno = Round(((@uBound - @lBound -1 ) * Rand() + @lBound), 0)
            END
        END
于 2013-04-04T07:13:44.243 に答える