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";

回答の条件
  • 1人10回まで
  • 登録:2006/08/09 22:27:12
  • 終了:2006/08/10 01:33:14

回答(2件)

id:YasuyukiMiura No.1

ココサブ回答回数33ベストアンサー獲得回数72006/08/10 00:03:42

ポイント35pt

ORDER BY main.日付

が気になります。

ORDER BY テーブル1.日付

になると思います。


そうでなかったら、

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

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

2006/8/8

2006/8/11

では

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

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

id:black_kenchan

すいません。

ORDER BY main.日付

は間違いです。

ORDER BY テーブル1.日付

です。

2006/08/10 00:14:02
id:fonya3 No.2

fonya3回答回数238ベストアンサー獲得回数102006/08/10 00:09:05

ポイント35pt

ダミー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の設計ありきです。

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

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

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

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

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

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

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

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません