人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQL+PHPで、サイトを制作しているのですが、データの表示の仕方で悩んでいます。
現在、下記の記述をしているのですが、最新の日付を取得できません。
どの様にすれば DISTINCT で絞り込んだナンバーに一番最新の日付を割り当てられますか?
特に DISTINCT に拘ってはいません。
GROUP BY で試したのですが、JOINと一緒に記述するときの方法が分かりません。
何か良い方法を教えてください。

$sql = "";
$sql .= "SELECT
DISTINCT テーブル1.ナンバー AS ナンバー1,
テーブル1.日付 AS 日付,
テーブル2.ナンバー AS ナンバー2,
テーブル2.コメント AS コメント";
$sql .= " FROM テーブル1 LEFT OUTER JOIN テーブル2 ON テーブル1.ナンバー=テーブル2.ナンバー";
$sql .= " ORDER BY main.日付 DESC";

●質問者: black_kenchan
●カテゴリ:ウェブ制作
✍キーワード:as GROUP MySQL ON Outer
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ココサブ
●35ポイント

ORDER BY main.日付

が気になります。

ORDER BY テーブル1.日付

になると思います。


そうでなかったら、

日付の形式を間違っている可能性は無いでしょうか?

文字列形式で日付のデータを扱っていた場合、

2006/8/8

2006/8/11

では

2006/8/8の方を大きい事になり、

期待と異なった結果になります。

◎質問者からの返答

すいません。

ORDER BY main.日付

は間違いです。

ORDER BY テーブル1.日付

です。


2 ● fonya3
●35ポイント

ダミーURLです。

http://www.2ones.com/geeklog_000/

そもそもDBの設計を見直すことも検討してはどうでしょう。

どうゆうシーンを想定しているのか分からないのですが、

テーブル1(ユーザーマスター):

ユーザーID

ニックネーム

メールアドレス


テーブル2(トランザクションデータ)

ユーザーID

日時

コメント

として、各ユーザーの最新コメントの日時が知りたいなら

$sql = "select ";

$sql .= " max(日時)";

$sql .= ",ユーザーID";

$sql .= " from テーブル2";

$sql .= " group by ユーザーID";

で、OKです。試してないのでMySQLでmax(日時)が

OKなのかどうかはちょっと自信が無いですが。

まずはDBの設計ありきです。

マスターデータとトランザクションデータを分離して

考えるのがポイントです。

マスターデータにトランザクション系のデータを持たせる

かどうかは、履歴がいるならトランザクションテーブルへ

分離、履歴が要らないならマスターを更新と考えれば分かり

やすいです。例えば最終ログイン日だけを保存して置きた

ければマスターを更新することになります。ただし、マスター

を更新する場合は排他制御に気を付ける必要があります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ