1

1日だけを返すようにしています。したがって、同じ日に2つのイベントがあった場合、1つのイベントのみが返されます。どのイベントが選択されるかは任意です。私がうまくいくと思ったクエリは次のとおりです。

SELECT DISTINCT day(events.event_start_date),events.event_id
FROM scheduled_events
JOIN events ON (
scheduled_events.event_id = events.event_id
)
WHERE scheduled_events.user_id = 123
AND MONTH( events.event_start_date ) = 06
AND YEAR( events.event_start_date ) = 2012

表:イベント

+------------+--------------------+
|  event_id  |  event_start_date  |
+------------+--------------------+
|     1      |     2012-06-06     |
|     2      |     2012-06-06     |
|     3      |     2012-06-07     |
+------------|--------------------|

テーブル:scheduled_events

+------------+-----------+
|  event_id  |  user_id  |
+------------+-----------+
|     1      |    123    |
|     2      |    123    |
|     3      |    123    |
+------------|-----------|

クエリがID3および(1または2)のイベントを返すようにします。

4

1 に答える 1

1

使用したDISTINCTキーワードは、行全体、つまりすべての列を指します。このため、1日に複数の結果が得られます。1日に1つの結果のみを表示するにはGROUP BY、その値を指定する必要があります。

SELECT day(events.event_start_date),events.event_id
FROM scheduled_events
JOIN events ON (
scheduled_events.event_id = events.event_id
)
WHERE scheduled_events.user_id = 123
AND MONTH( events.event_start_date ) = 06
AND YEAR( events.event_start_date ) = 2012
GROUP BY day(events.event_start_date)

これはmysqlで機能し、リストされたイベントは、要求に応じて任意のイベントになります。しかし、他のいくつかのSQL方言はこれを禁止し、mysqlを使用しても、再現可能な動作が必要な場合があります。そのような場合は、たとえば、と一緒に集計関数を使用する必要があります。event_idMIN(event_id)

于 2012-07-11T10:44:54.810 に答える