0

システム上のすべてのユーザーを検索する「ユーザー」テーブルのクエリから生成された HTML テーブルがあります。

2 番目のクエリは、「select count」を使用して、ユーザー ID がミーティング テーブルに表示される回数を確認することで、ユーザーが予約したミーティングの数をカウントします。

<cfquery datasource="iPad" name="Two">
 SELECT COUNT(userID) AS meetingsCount from meeting where userID = '#One.userID#'
 </cfquery>

ページ上のリンクをクリックして、meetingsCount に基づいてテーブルの順序を変更できるようにしたいと考えています。問題は、MYSQL のテーブルに技術的に存在しないため、この情報を照会する方法がわからないことです。

編集; 左結合と検証を使用するコード。

select user.userID, user.contactName, user.email, count(meeting.userID)
as meetingsCount 
 from user where user.userID = 30 
AND user.userID NOT IN ('1', '2', '3', '4', '58', '59', '62',
'63', '64', '66', '69', '71',    '72', '73', '78', '107')
AND SUBSTRING( meeting.meetingCode, 5, 2 ) 
BETWEEN 12 AND 22 
AND SUBSTRING( meeting.meetingCode, 7, 2 ) 
BETWEEN 1 AND 12 
AND SUBSTRING( meeting.meetingCode, 9, 2 ) 
BETWEEN 01 AND 31
left outer join meeting on user.userID = meeting.userID
4

1 に答える 1

6

group by を使用して 1 つのクエリでこれを行う必要があります。

編集: where 句を回答に追加しましたが、ユーザー ID をハードコーディングして除外する代わりに、ユーザー ID をロールに割り当てることを検討して、これらの人々を除外するすべてのクエリではなく、1 つの場所でロールを管理できるようにする必要があります。not inまた、すでに単一の ID を要求している場合は必要ありません。今のところ問題を解決しているだけだとは思いますが、覚えておいてください。それでもうまくいかない場合は、部分文字列のロジックを確認します。

<cfquery>
    select
          user.userID
        , firstName
        , lastName
        , count(*) as meetingCount
    from
        user
        left outer join meeting on users.userID = meeting.userID
          AND (    SUBSTRING( meeting.meetingCode, 5, 2 ) BETWEEN 12 AND 22 
               AND SUBSTRING( meeting.meetingCode, 7, 2 ) BETWEEN 1 AND 12 
               AND SUBSTRING( meeting.meetingCode, 9, 2 ) BETWEEN 1 AND 31)
      -- the ( ) above are optional but I like them to show groups of like filters
      -- if you don't want to use them feel free not to.
    where 
         user.userID NOT IN (1,2,3,4,5,59,62,63,64,66,69,71,72,73,78,107)     
    group by
          user.userID
        , firstName
        , lastName
    order by
        meetingCount
</cfquery>

MySqlではエイリアスで注文できると思いますが、思い出せません。そうでない場合は、順序を次のように変更しますcount(*)

于 2013-02-15T12:17:39.367 に答える