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

MySQLで重複データを省きたい

お世話になっています。

イベントマスタ、イベント、ニュース、テーブルがあり
イベントデータだけ重複を省きたいです。

DISTINCTとGROUP BYが思い浮かんだのですが、
3つ以上のテーブルを結合するのに特定の1つのカラムのみ重複を省きたいので
DISTINCTが使用できず

イベントマスタにGROUP BYを使用してしまうとニュースの項目がとってこれなくなってしまいます。

スマートな書き方はないでしょうか?

ご教授宜しくお願いします。

●質問者: oracle11011
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● きゃづみぃ

抽出した結果に対してselect distinct としてやればいいです。


oracle11011さんのコメント
今現在のやり方なのですが SELECT ex.name, MAX( top.regi ) FROM dtb_event AS ev LEFT JOIN dtb_top AS top ON top.event_id = ev.id LEFT JOIN mtb_ex AS ex ON ex.id = ev.ex GROUP BY ex.name HAVING MAX( top.regi ) IS NOT NULL ORDER BY MAX( top.regi ) DESC これでイベントデータは取得してきて ニュースデータは SELECT top.regi, ne.name FROM dtb_news AS ne LEFT JOIN dtb_top AS top ON top.news_id = ne.id ORDER BY top.regi DESC で取得して array_merge(); array_multisort(); でイベントとニュースの並び順をあわせています。 この処理を1回のsqlで実行できないでしょうか。

質問者から

補足

dtb_top
event_id news_id regi//登録日

mtb_ex 展示場マスタ
id name

dtb_event
id ex name

dtb_news
id name

この4テーブルがありsqlは

SELECT ex.name, ne.name, top.regi
FROM dtb_top AS top
LEFT JOIN dtb_event AS ev ON top.event_id = ev.id
LEFT JOIN mtb_ex AS ex ON ex.id = ev.ex
LEFT JOIN dtb_news AS ne ON top.news_id = ne.id
ORDER BY top.regi DESC

な感じなのですが
イベントデータだけ登録日が新しい展示場ごと1件だけを取得したいです。

ニュースはイベントとの並び順だけを維持したいです。

1回のクエリーでやってみたいです。


関連質問

●質問をもっと探す●



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