2009-07-21 45 views
0

私は今日5つのイベントを得ることについて、このSQLクエリを持っている:MySQL:現在の日付を使用して「今週の日付」を取得する方法は?

SELECT n.nid, n.type, n.title, nr.body, nr.teaser, FROM_UNIXTIME(e.event_start) start_date, FROM_UNIXTIME(e.event_end) end_date 
FROM node n 
LEFT JOIN event e ON n.nid = e.nid 
LEFT JOIN node_revisions nr ON nr.nid = e.nid 
WHERE n.`type` = 'event' 
AND NOW() BETWEEN FROM_UNIXTIME(e.event_start) AND FROM_UNIXTIME(e.event_end) 
ORDER BY n.`created` DESC 
LIMIT 5 

は、その後、私は今日を「と日曜日に始まり、 『』が含まれる週を」使用「今週のイベント」を取得する必要があります。

どのように私はそれをMySQLで行うことができますか?

ご協力いただければ幸いです。おかげで、事前に:)

乾杯、あなたは「今週は」より良い定義する必要が マーク

答えて

7

- あなたは今日を中心に7日間スライディングウィンドウ、または週(「含むものを意味しています今日 ")日曜日に?これは「今週」の意味に完全に依存しており、あいまいな表現の意味を決めることは不可能です。あなたが言及する2つのアプローチのうち、一方または他方(またはその上の変形)は、あなたの意味に応じて適切です。

編集:OPは、彼が今日「と日曜日に始まり、 『』が含まれる週」を意味することをコメントで明らかにした - と私は彼がターゲットに固有のSQL方言があることをFROM_UNIXTIMEの彼の使用から推測MySQL。次に、WEEK(somedate, 0)は、彼が望むものを正確に与えるべきMySQL関数です。mysql's docsを参照してください。

具体的には、

AND WEEK(CURDATE, 0) BETWEEN WEEK(FROM_UNIXTIME(e.event_start), 0) 
         AND WEEK(FROM_UNIXTIME(e.event_end), 0) 

はOPが探しているWHERE句でなければなりません。

+0

こんにちはアレックス、私も不確かなので申し訳ありませんが、私はそれを確認し、正しいものは "今日は"と "日曜日に始まる"週です:) – marknt15

+0

ありがとうアレックス! :Dそれは働いた。私は今までWEEK()関数に慣れていません。それは今働く。乾杯! – marknt15

+0

偉大な答え、アレックス – Christian

1

これはSQL ServerまたはMySQLの場合はわかりませんが、MySQLでは現時点のweekdayを取得してからdate_addを使用して、現在の日付(開始日)から開始日もう一度date_addを使用して7日(終了日)を追加します。

うまくいけば、助けが必要な場合は教えてください。

0

テーブル名/列名に基づいて、Drupalで作業しているようです。目標を達成するためにビューを使用することを検討しましたか?私は文脈から、あなたが書いているモジュールの一部であるかどうかを知ることはできません。その場合は、プラグインを外しておくか、ブロックの中にイベントリストを表示したいだけです。 PHP/SQLを使いこなすことなく、すべてのことをあなたのために行います。

0

あなたがそのオプションを持っているかどうかわかりませんが、パフォーマンス上の理由から、プログラムコードで日付計算を行う方がよい場合があります。 WHERE句のカラムで関数を使用すると、MySQLはインデックスを使用できません。簡単な例:http://netfactory.dk/2004/12/13/mysql-date-functions-and-indexes/ ほとんどの言語は日付/時刻操作のためにまともな関数/ライブラリを持つべきです。

関連する問題