2

私はちょっと立ち往生しています..

私は2つのテーブルを持っています

mysql > EXPLAIN event;
+-------------+--------------+------+-----+---------------------+-----------------------------+
| Field       | Type         | Null | Key | Default             | Extra                       |
+-------------+--------------+------+-----+---------------------+-----------------------------+
| id          | int(11)      | NO   | PRI | NULL                | auto_increment              |
| name        | varchar(100) | NO   | MUL |                     |                             |
| extUrl      | varchar(192) | NO   |     |                     |                             |
+-------------+--------------+------+-----+---------------------+-----------------------------+

1 つのイベントに複数のイベントを含めることができます

mysql> explain eventDate;
+----------------+--------------+------+-----+---------------------+-----------------------------+
| Field          | Type         | Null | Key | Default             | Extra                       |
+----------------+--------------+------+-----+---------------------+-----------------------------+
| id             | int(11)      | NO   | PRI | NULL                | auto_increment              |
| category_id    | int(11)      | NO   | MUL | 0                   |                             |
| event_id       | int(11)      | NO   | MUL | 0                   |                             |
| location_id    | int(11)      | NO   | MUL | 0                   |                             |
| name           | varchar(100) | NO   |     |                     |                             |
| eventDate      | timestamp    | NO   |     | 0000-00-00 00:00:00 |                             |
+----------------+--------------+------+-----+---------------------+-----------------------------+

次の予定の でidイベントをクエリしたいのですが、そのクエリを作成する方法がわかりません。location_id eventDate

私は現在これを持っています

 SELECT
      e.id,
      d.location_id,
      d.eventDate
 FROM
      event e
          INNER JOIN eventDate d ON d.event_id = e.id AND d.eventDate >= CURRENT_TIMESTAMP
 WHERE
      e.id = 5107
 GROUP BY
      e.id
 ORDER BY
      d.eventDate ASC

これで結果が返されますが、私は GROUP BY イベントであるため、実際に次の eventDate が選択されていることを確認する方法がわかりません。また、集計関数 (group by one、aggregate many) も使用していません。これは、クリーンで明確に定義された結果要件ではないようです。MySQL は eventDate 行の 1 つをランダムに選択していますね。

4

1 に答える 1

2

これにより、常に最初の今後のイベントが表示されます。

 SELECT
      e.id,
      d.location_id,
      d.eventDate
 FROM
      event e
          INNER JOIN eventDate d ON d.event_id = e.id
 WHERE
      e.id = 5107
      AND
      d.id = (SELECT d1.id FROM eventDate d1 WHERE d1.event_id = 5107 AND d1.eventDate >= CURRENT_TIMESTAMP ORDER BY d1.eventDate ASC LIMIT 1)

しかし、より良い方法はLIMIT 1、現在のクエリに追加して以下を削除することGROUP BYです:

 SELECT
      e.id,
      d.location_id,
      d.eventDate
 FROM
      event e
          INNER JOIN eventDate d ON d.event_id = e.id AND d.eventDate >= CURRENT_TIMESTAMP
 WHERE
      e.id = 5107
 ORDER BY
      d.eventDate ASC
 LIMIT 1
于 2013-01-14T11:07:26.223 に答える