質問

メンバーごとにエントリを1日に1日に制限する必要があるメンバーサイトのPHPコンペティションスクリプトを書いています。これまでのところ、次のMySQLコードがあります。

SELECT ce_id 
  FROM competition_entries 
 WHERE ce_c_id = '$c_id' 
       AND ce_sub_id = '$user_id' 
       AND cte_date >= SYSDATE() - INTERVAL 1 DAY
  • CE_C_IDは競争IDです。
  • CE_SUB_IDはメンバーIDです
  • CTE_DATEは、エントリ用のMySQL DateTimeスタンプです。

私が今いる場所からテストするのは難しいです、そして私は解決策を見つける必要があるので、これが1日1回または24時間1回に制限されているかどうかを誰かが教えてくれることを願っています - そしてそれが後者の場合、正しい方向。

ティア:)

役に立ちましたか?

解決

user_id、competition_id、および日付タイプ列で構成されるプライマリキーを作成します。

ユーザーがすでにエントリを配置しているかどうかを確認するには:

select count(*)
from competition_entries
where ce_c_id = '$c_id' 
    AND ce_sub_id = '$user_id' 
    AND cte_date = current_date()

他のヒント

これが1日1回または24時間1回に制限されているかどうかを誰かが教えてくれることを願っています

24時間のように見えます:

mysql> select sysdate(), sysdate() + interval 1 day;
+---------------------+----------------------------+
| sysdate()           | sysdate() + interval 1 day |
+---------------------+----------------------------+
| 2011-03-21 15:50:56 | 2011-03-22 15:50:56        | 
+---------------------+----------------------------+
1 row in set (0.01 sec)

「明日」が必要な場合は、今夜23:59を過ぎた1分で、普通のことを削り取ることを検討してください DATE'の解決策:

mysql> select DATE(sysdate()), DATE(sysdate()) + interval 1 day;
+-----------------+----------------------------------+
| DATE(sysdate()) | DATE(sysdate()) + interval 1 day |
+-----------------+----------------------------------+
| 2011-03-21      | 2011-03-22                       | 
+-----------------+----------------------------------+
1 row in set (0.00 sec)

日付の代わりに日付を考慮するだけで、カットオフは真夜中に効果的に期限切れになります。ただし、気をつけてください。MySQLサーバーの時間に翻弄されます。これは、異なるマシンにいる場合はアプリケーションサーバーの時間とは異なる場合があります。

テストなしでは確信が持てませんが、24時間ごとに1回だと推測します。

代わりに次のことを試してください:

SELECT ce_id FROM competition_entries WHERE ce_c_id = '$c_id' AND ce_sub_id = '$user_id' AND DATE(cte_date) == DATE(SYSDATE())

ここでは、2つの日付を明確に比較しています。1つはフィールドから、もう1つは平等の現在の日付からです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top