0

解決しようとしている問題が少しあります。

私は、PHPがしなければならない量を減らすために、より多くのロジックをSQL呼び出しに入れようとしています。そのような場所の 1 つは、ユーザーが特定のメッセージを読んだかどうかを判断するロジックです。それは機能しますが、あまりにもうまく機能します.SQLは次のとおりです。

SELECT t.* FROM comment c
LEFT JOIN read_message rm ON c.id-rm.cid
WHERE c.author!=2 AND rm.User=2 AND c.tid=17 AND rm.Topic=17 AND c.Original_Date >=  UNIX_TIMESTAMP()-3600*24*30 OR c.last_update >= UNIX_TIMESTAMP()-3600*24*30

問題は、入力されたメッセージ ID に関係なく、新しいと見なされるすべてのレコードが常に表示されますが、ID が一致する場合にのみ表示することです。

私が欲しいものを単純化するために:

メッセージ ID に基づいて、ユーザーがこのメッセージを既に読んだかどうかを確認しますが、そのメッセージが 30 日より古い場合は、自動的に古いものと見なされます。

問題は 30 日間の計算です。その部分を取り出した場合は正しく機能しますが、30 日より古いものは無視する必要があります。

これを知る必要がある場合に備えて、私が使用しているフレームワークであるため、タグに codeigniter をリストしました。

4

1 に答える 1

1

mysql を使用している場合、次の SQL を使用して過去 30 日以内のメッセージを取得できるはずです。

SELECT t.* FROM comment c
LEFT JOIN read_message rm ON c.id-rm.cid
WHERE c.author!=2 AND rm.User=2 AND c.tid=17 AND rm.Topic=17 AND
(c.Original_Date BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW())
OR (c.last_update BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW())

これに似たものがあなたの例でうまくいくはずです。

于 2012-11-20T00:30:06.580 に答える