mysql:15177
From: <kaba@xxxxxxxxxx>
Date: Mon, 1 Feb 2010 17:44:44 +0900 (JST)
Subject: [mysql 15177] Re: JOIN 文での件数絞り込みについて
こんにちは、Hiroshi Kabayamaと申します。
時間があったので、SQLを考えてみました。
MySQL5.0であれば副問合せが使えるはずですので、
こんな感じにしてみてはいかがでしょうか?
■SQL
================================================
SELECT
ev.eventId,
sa.name
FROM
t_event ev,
t_sankasha sa
WHERE
ev.id = sa.evId
AND ev.evDay =
(
SELECT MIN(evDay) FROM t_event
WHERE evDay >= {$today}
)
ORDER BY
ev.evDay,
ev.starttime;
================================================
まず、副問合せでイベントテーブルから今日以降で最も小さい
日付を取得してきます。
その日付を用いて、ダイレクトに等比較で絞り込めると思います。
ただし、同日付のイベントが複数ある場合はどのような
表示にするのか考える必要があるかと思います。
1件のイベントだけ表示したいのであれば、他に何か絞り込みの
条件が必要になるということです。
全件表示するのであれば、上記のSQLでいけると思います。
私が思い付いたのはこんな感じです。
参考になれば幸いです。
以上
> MYSQL初心者で勉強中の Tadashi Kunitomoといいます
> 環境はCentOS5.3 Mysql5で作業しています
>
> 現在スケジューラを作っていて、初回アクセス時に次回のイベント
> を表示させたいと思います。
> 取得するデータは eventテーブルから開催日やイベント
> 名、sankashaテーブルから参加者名なので
>
> SELECT ~~ FROM `t_event` LEFT JOIN `t_sankasha` ON `t_event`.id =
> `t_sankasha`.evId
> WHERE `t_event`.evDay >= {$today} ORDER BY `t_event`.evDay,
> `t_event`.starttime
>
> という感じに書いたんですが、これだと当然今日の日付より新しい
> イベントが全部取られてしまいます
> 直近の一イベントの情報に限って取得するにはどうしたら良いで
> しょうか?
> LIMIT 1を上のクエリ文に追記で書いたところ、本当に1行しか返し
> てくれないので
> LEFT JOINで取得される複数行部分が取れず不完全になってしまいま
> した。
>
> どなたか宜しくお願いします。
> PHP側で整形することを考えましたが、クエリの負担を減らせるグッ
> ドアイデアを教えてくれると嬉しいです。
> 宜しくお願いいたします。
>
15176 2010-02-01 17:14 [小林 正史 <gustav.tk] JOIN文での件数絞り込みについて -> 15177 2010-02-01 17:44 ┗[<kaba@xxxxxxxxxx> ] 15178 2010-02-01 19:08 ┗[小林 正史 <gustav.tk] Re: JOIN 文での件数絞り込みについて 解決