3

アップデート

私はウェブサイトのバックエンドを作っています。ウェブサイトの平均的なポイントは、訪問者にいつ、どのような活動を行っているかを明確に示すことです。
だから私はあらゆる種類の活動でデータベースを埋めました。すべてのアクティビティには、日付、名前、およびその他の情報があります。

これまでの活動を見せてもビジターの役に立たないのは明らかなので、今後の活動だけを見せてほしい。また、多くの作業を節約するために、すべての作業を PHP/MySQL で行い、次の 2 つのイベントのみを訪問者に表示するとよいでしょう。

これを行うための MySQL 関数を教えてもらえますか?

前もって感謝します、

4

3 に答える 3

3

あなたが使用することができDATEDIFFますABS...

SELECT * FROM `activities` ORDER BY ABS(DATEDIFF(NOW(), `date`)) LIMIT 2

更新された質問から、将来の活動のみが考慮されます...だから...

SELECT * FROM `activities` WHERE `date` > NOW() ORDER BY `date` LIMIT 2
于 2011-04-18T14:31:32.797 に答える
3

いくつかのアドバイス:

現在の瞬間の前に最も近い2つのイベントを選択し、現在の瞬間の後に最も近い2つのイベントを選択します。

(SELECT *
FROM ...
WHERE `time` < NOW()
ORDER BY `time` DESC
LIMIT 2)
UNION
(SELECT *
FROM ...
WHERE `time` > NOW()
ORDER BY `time` ASC
LIMIT 2)

この時点で、PHPでは最大4つのイベントが発生します。ただし、必要なのは2つだけです。最も近い2.使用する最も近いものを見つけてstrtotime、イベントのタイムスタンプとを呼び出すことで取得できる現在のタイムスタンプの違いを確認しますtime()。その後、最も近い2つのイベントのみを保持します。

これはMySQLから直接実現できますが、その方法では難しいことに注意してください。


@最新の更新。詳細を知りたくない場合は、これを読むだけで十分です。

このクエリを使用するだけです:

SELECT *
FROM ...
WHERE `time` > NOW()
ORDER BY `time` ASC
LIMIT 2
于 2011-04-18T14:33:52.957 に答える
0
$query = 'SELECT .... FROM ... WHERE `date` > '.$today.' ORDER BY `date` DESC LIMIT 2';

$todaydate列のタイプによって異なります。

于 2011-04-18T14:22:33.203 に答える