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 文での件数絞り込みについて 解決