mysql:15178
From: 小林 正史 <小林 正史 <gustav.tk@xxxxxxxxxx>>
Date: Mon, 1 Feb 2010 19:08:49 +0900
Subject: [mysql 15178] Re: JOIN 文での件数絞り込みについて 解決
ありがとうございます! 質問者のTadashi Kobayashiです 教えていただいた方法で解決しました。 サブクエリは使い道がわからなかったので本当に勉強になりました また今後も質問させていただくと思います 宜しくお願いします 他のMLメンバーの方も、ありがとうございました On 2010/02/01, at 17:44, kaba@xxxxxxxxxx wrote: > こんにちは、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 文での件数絞り込みについて 解決