1

クライアントがイベント情報をデータベースに保存するサイトがあります...本当に簡単です。

問題は、データを取り出したいときです。私は現在、すべてのデータを選択し、月の昇順で注文することでこれを行うことができます....

私が必要とするのは、現在と同じようにすべての情報を表示することです。ただし、最初に当月のすべてのデータをリストし、次に翌月というようにこの情報を表示する必要があります。単に情報を適切な昇順の月次順序でリストし、現在の月の最初のイベントまでスクロールする必要があるかどうかは気にしません....

現在、私のデータベースには次のものがあります。

ID, year, month, day, event_loc, event_address, event_link, event_time, event_name

ここで実際にそれを見ることができます:

http://www.michael-eubanks.com/events.php

4

3 に答える 3

0

私が正しければ、あなたが望むのはグループ化(集約)なので、必要なのは次のようにグループ化することだけです:

SELECT * FROM myTable GROUP BY month ORDER BY month DESC;

降順を使用して、現在の月を最初に表示しました。

于 2013-09-25T05:01:14.473 に答える
0

私の理解が正しく、当月の最初の日から始まるイベントのみを選択したい場合は、次のようにすることができます

SELECT ID, year, month, day, event_loc, event_address, event_link, event_time, event_name
  FROM events
 WHERE STR_TO_DATE(CONCAT_WS('-', year, month, day), '%Y-%c-%e') >= DATE_FORMAT((CURDATE()), '%Y-%m-01')
 ORDER BY year, month, day

これがSQLFiddleのデモです


ここで、インデックスと範囲検索を使用してデータを通常どおりクエリできるようにするには、テーブルのスキーマを変更してdatetime(event_date列の場合) とtime(の場合event_duration) のデータ型を使用することをお勧めします。提案されたスキーマは次のようになります

CREATE TABLE events
(`ID` int, 
 `event_date`     datetime, 
 `event_loc`      varchar(256), 
 `event_address`  varchar(256), 
 `event_link`     varchar(256), 
 `event_duration` time, 
 `event_name`     varchar(256)
);

次に、クエリは次のようになります

SELECT ID, DATE(event_date) event_date, 
       event_loc, 
       event_address, 
       event_link, 
       CONCAT(DATE_FORMAT(event_date, '%l:%i%p - '), 
              DATE_FORMAT(ADDTIME(event_date, event_duration), '%l:%i%p')) event_timee, 
       event_name
  FROM events
 WHERE event_date >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
 ORDER BY event_date

これがSQLFiddleのデモです

于 2013-09-25T05:18:49.723 に答える
0

たぶん、次のようなSQLです:

select * from <tablename> order by year desc, month desc, day desc

データは最初に年、次に月、次に日とすべて降順で並べられるため、最新のイベントが最初に表示されます。

于 2013-09-25T04:50:42.880 に答える