[前][次][番号順一覧][スレッド一覧]

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