【问题标题】:How to improve multiple queries如何改进多个查询
【发布时间】:2021-10-16 15:10:48
【问题描述】:

目标:我想为我的简单硬币投注系统做一个总计。

  • 有硬币存款的会员总数:显示进行存款交易的所有会员的数量。
  • 提款的会员总数:显示进行提款交易的所有会员的数量。
  • 投注总数:显示所有投注的计数
  • 有硬币余额的会员总数:显示所有仍硬币余额的会员的数量。

代码:长切

MYSQL = "SELECT DISTINCT member_id"
MYSQL = MYSQL & " FROM GameActivityReport"
MYSQL = MYSQL & " WHERE CoinDeposit > 0"

Set rs = New ADODB.Recordset
Debug.Print MYSQL
rs.Open MYSQL, db, adOpenStatic, adLockReadOnly
    
With MainWindow
    If rs.EOF Then
    Else
        .lblCheckerKPITotPWD.Caption = rs.RecordCount
    End If
End With

rs.Close
Set rs = Nothing

MYSQL = "SELECT DISTINCT member_id"
MYSQL = MYSQL & " FROM GameActivityReport"
MYSQL = MYSQL & " WHERE CoinWithdarawal > 0"

Set rs = New ADODB.Recordset
Debug.Print MYSQL
rs.Open MYSQL, db, adOpenStatic, adLockReadOnly
    
With MainWindow
    If rs.EOF Then
    Else
        .lblCheckerKPITotPWW.Caption = rs.RecordCount
    End If
End With

rs.Close
Set rs = Nothing

MYSQL = "SELECT COUNT(*) AS NewCoinDropCount"
MYSQL = MYSQL & " FROM GameActivityReport"
MYSQL = MYSQL & " WHERE CoinDrop > 0"

Set rs = New ADODB.Recordset
Debug.Print MYSQL
rs.Open MYSQL, db, adOpenStatic, adLockReadOnly
    
With MainWindow
    If rs.EOF Then
    Else
        .lblCheckerKPITotPWB.Caption = rs.Fields("NewCoinDropCount")
    End If
End With

rs.Close
Set rs = Nothing

MYSQL = "SELECT DISTINCT member_id"
MYSQL = MYSQL & " FROM GameActivityReport"
MYSQL = MYSQL & " WHERE CoindBalance > 0"

Set rs = New ADODB.Recordset
Debug.Print MYSQL
rs.Open MYSQL, db, adOpenStatic, adLockReadOnly
    
With MainWindow
    If rs.EOF Then
    Else
        .lblCheckerKPITotEC.Caption = rs.RecordCount
    End If
End With

rs.Close
Set rs = Nothing

db.Close
Set db = Nothing

问题:我怎样才能缩短我上面的代码。

【问题讨论】:

  • 也许您可以将所有查询合并到一个联合查询中。当然,您需要在该列中为您的查询添加一列和标记名称,以区分查询。只是一个想法。
  • Stack 有一个姊妹网站来解决这类问题,你可能会在那里得到更好的回应:codereview.stackexchange.com
  • 这些字段名称是否正确 CoinWithdarawalCoindBalance
  • 这将更适合codegolf.stackexchange.com,但在其当前状态下不可以在那里发布。如果您包括到目前为止所做的以缩短代码以及您要完成的实际任务的详细信息,那么它可能是主题

标签: excel vba adodb


【解决方案1】:

按照 Ozgun 的建议,创建一个联合查询

Option Explicit
Sub counts()

    Dim conn As ADODB.Connection, rs As ADODB.Recordset
    Dim sql(3) As String, sql_all As String, counts(4) As Integer

    sql(0) = " SELECT 1,COUNT(DISTINCT member_id) FROM GameActivityReport " & _
             " WHERE CoinDeposit > 0"
    sql(1) = " SELECT 2,COUNT(DISTINCT member_id) FROM GameActivityReport " & _
             " WHERE CoinWithdrawal > 0"
    sql(2) = " SELECT 3,COUNT(*) FROM GameActivityReport " & _
             " WHERE CoinDrop > 0"
    sql(3) = " SELECT 4,COUNT(DISTINCT member_id) FROM GameActivityReport " & _
             " WHERE CoinBalance > 0"
  
    sql_all = Join(sql, vbCrLf & " UNION " & vbCrLf)

    ' get connection, run sql
    Set conn = ??? ' establish a connection 
    Set rs = conn.Execute(sql_all)
    Do While Not rs.EOF
        counts(rs(0)) = rs(1)
        rs.MoveNext
    Loop

    With MainWindow
        .lblCheckerKPITotPWD.Caption = counts(1)
        .lblCheckerKPITotPWW.Caption = counst(2)
        .lblCheckerKPITotPWB.Caption = counts(3)
        .lblCheckerKPITotEC.Caption = counts(4)
    End With
    conn.Close

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2013-07-21
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多