簡體   English   中英

選擇具有最低值的隨機數據庫記錄

[英]Select random database record with a lowest value

對VB非常陌生,因此如果我覺得沒有什么道歉的話。 我有一個瑣事問題數據庫,其中包含三個字段:“問題”,“答案”和“詢問時間”。 我希望能夠單擊一個按鈕,並從“最低要求時間”值最低的記錄中隨機地從數據庫接收一個問題,然后向該記錄的“最低要求時間”值中添加一個。 誰能幫我嗎? 到目前為止,這是我得到的:

Private DBCon As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; "Data Source=Trivia.accdb;")

Public Sub GenerateQuestion()

DBCon.Open()

'grab how many questions there are total
    Dim QuestionsQuery As String = "SELECT COUNT(*) FROM Questions"
    Dim QuestionsCmd As New OleDbCommand(QuestionsQuery, DBCon)
    Dim NumOfQuestions As Integer = QuestionsCmd.ExecuteScalar()

    'grab the lowest number from Times Asked
    Dim SeenQuery As String = "SELECT MIN(`Times`) FROM Questions"
    Dim SeenCmd As New OleDbCommand(SeenQuery, DBCon)
    Dim SeenReader As OleDb.OleDbDataReader = SeenCmd.ExecuteReader
    SeenReader.Close()

 End Sub

從另一個表單上的按鈕調用此子項,當我單擊該按鈕時,行/列中不存在任何數據,這將導致異常。 即使我設法獲得該值,但我也不知道下一步是從最小的Times值中實際抓取一個隨機問題,然后將該問題的Times值加一個。

供參考的是我正在使用atm的表: http : //i.imgur.com/2vwlVQR.jpg

編輯:對於將來在這里發現此問題的任何人來說,都是解決問題的代碼:

Imports System.Data.OleDb
   Dim rng As New Random
Dim connection As OleDb.OleDbConnection

Private Function GetQuestionWithAnswer() As Tuple(Of String, String)
    'Use XML literals for the SQL statements.
    Dim selectSql = <sql>
                    SELECT *
                    FROM Questions
                    WHERE Times =
                    (
                        SELECT MIN(Times)
                        FROM Questions
                    )
                </sql>
    Dim updateSql = <sql>
                    UPDATE Questions
                    SET Times = @Times
                    WHERE ID = @ID
                </sql>

    Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=Trivia.accdb;")
        Dim adapter As New OleDbDataAdapter(selectSql.Value, connection)
        Dim updateCommand = New OleDbCommand(updateSql.Value, connection)

        With updateCommand.Parameters
            .Add("@Times", OleDbType.Integer, 0, "Times")
            .Add("@ID", OleDbType.Integer, 0, "ID")
        End With

        adapter.UpdateCommand = updateCommand

        Dim table As New DataTable

        'Getall the questions that have been asked the fewest number of times.
        adapter.Fill(table)

        'Select a question at random.
        Dim record = table.Rows(rng.Next(table.Rows.Count))

        'Increment the number of times the question has been asked and save the change.
        record("Times") = CInt(record("Times")) + 1
        adapter.Update(table)

        'Package up the selected question.
        LblQuestion.Text = record(1)
        Return Tuple.Create(CStr(record("Question")), CStr(record("Answer")))

    End Using
End Function

在這里您可以找到Rand在Mysql中的使用: http : //jan.kneschke.de/projects/mysql/order-by-rand/

如果使用蘭德,則不必選擇未顯示最多的問題。 如果僅使用蘭德,則將達到平衡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM