2

適格なキーを見つけるためのクエリを作成しようとしています。キーが適格であるための基準は、24時間以内に10回使用されてはならないということです。

キーが使用されるたびに、レコードがテーブルapi_historyに保存されます。

誰かがそれを正しく行う方法を教えてもらえますか?現在、api_historyにレコードが存在しないため、空のキーが返されます。(その後、最初のギブキーを返す必要があります)。

前もって感謝します!

クエリ:

SELECT ak.key 
FROM api_history ah 
  INNER JOIN api_keys ak ON ah.key_id = ah.id 
WHERE ah.used_at > DATE_SUB(now(), INTERVAL 1 DAY) 
HAVING COUNT(ah.id) < 10 LIMIT 0,1

テーブル:

api_keys

  • id(int)
  • キー(文字列)

api_history

  • id(int)
  • key_id(int)
  • used_at(日時)
4

3 に答える 3

2

それを試してください:

SELECT ak.key 
FROM api_keys ak
  LEFT JOIN api_history ah 
    ON  ah.key_id = ak.id 
    AND ah.used_at > DATE_SUB(now(), INTERVAL 1 DAY)
WHERE 1 
GROUP BY ak.key
HAVING COUNT(ah.id) < 10 
LIMIT 1
于 2012-08-03T14:14:50.703 に答える
2

それはあなたのために働きますか?

SELECT ak.key, COUNT(ah.id) as num_usage_24hrs 
FROM api_keys  ak
LEFT JOIN api_history ah ON (ah.key_id = ak.id 
    AND ah.used_at > DATE_SUB(now(), INTERVAL 1 DAY) )    
GROUP BY ak.key
HAVING COUNT(ah.id) < 10 

**おそらく必要ないでしょうCOUNT(ah.id) as num_usage_24hrsselect私はデバッグのためだけにそれを出力します。

更新ah.key_id = ak.idされました(ではなく、 である必要がありますah.key_id = ah.id

于 2012-08-03T14:11:01.017 に答える
1

私が正しく理解していれば、api_keysテーブルにmaxキーが必要だと思います。だから多分あなたはこのようなことをすることができますか?

SELECT max(ak.key) 
FROM api_keys ak
WHERE NOT EXISTS
(SELECT * FROM api_history ah 
WHERE ah.key_id = ak.id AND ah.used_at > DATE_SUB(now(), ITERVAL 1 DAY))
GROUP BY ah.key_id
HAVING COUNT(ah.id)<10)
于 2012-08-03T14:32:21.973 に答える