2010年2月 1日

[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側で整形することを考えましたが、クエリの負担を減らせるグッ
> ドアイデアを教えてくれると嬉しいです。
> 宜しくお願いいたします。
>


投稿者 xml-rpc : 2010年2月 1日 17:44
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/92907
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。