アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のようMySQLを使い、Unionで結合していますが、出力する2つのカラムのうち、一列目のカラムの重複している部分がある行だけ省きたいと思います。そこで、group by を最後に追加したいと思うのですが、動きませんでした。もしかしたら結合したあとにGROUP BYは無理なのかもしれませんが、他のやり方でも可能なら教えてくださいるよろしくお願いします。

(SELECT other_id AS a,send_tim FROM message WHERE user_id =5 GROUP BY other_id)union
(SELECT user_id AS a,send_tim FROM message WHERE other_id =5 GROUP BY user_id)order by send_tim desc GROUP BY a

質問者からの補足コメント

  • 2つ目のSELECT文のWhere句でnot exists(1つ目のSELECT)もANDで加えましたが上手くいきませんでした。クエリではなくても
    同じことをするには、変数にいれたあとで、array_unique()関数で重複箇所は削除できましたが、データベース上の操作でもうまくいかないものかと思いまして尋ねてみました。

      補足日時:2016/05/04 10:26

A 回答 (1件)

unionした2行をカッコでくくってfrom句にいれてgroupbyしてみては?

    • good
    • 0
この回答へのお礼

ありがとうございます。まさかFrom句にくるとは思ってもいませんでした。From句にサブクエリをいれたことがなかったのでイメージがわきませんでしたが、いろいろ調べていくうちにかなり勉強になりまし。
おっしゃるとおりFROM句にいれて
SELECT * FROM((SELECT other_id AS ID,send_tim FROM message WHERE user_id =5 )union
(SELECT user_id,send_tim FROM message WHERE other_id =5 ))as ABC GROUP BY ID ORDER BY send_tim DESC のような形で GROUP BYすることがでまきした。
括弧でくくった部分になにか名前をつけないといけならしいので、適当にABCとしました。

お礼日時:2016/05/04 21:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A