前提・実現したいこと
内部結合した重複するデータを除外してデータを取得したい
現在PHPで自作アプリを制作しています。
3つのテーブルを内部結合しましたが、id①(リクエストID)、id②(企業ID),id③(リストID)のうち、id③(リストID)が重複しないようにデータを抽出したいです。
以下テーブルの構造になります。
コメントテーブル(comments)
以下のSQL文では、
欲しい情報:
commentsテーブルの全データ、
postsのcompany_id,title,category_id,price,tag
companiesテーブルのcompany_name
問題のSQL
public function getRequestMyShow($id) { $sql = 'SELECT DISTINCT post_id, r.id AS リクエストID, r.company_id AS 企業ID, r.post_id AS リストID, r.text AS リクエストテキスト, r.created_at AS 最新のリクエスト送信日, c.id AS 企業ID, c.company_name, p.id AS リストID, p.title, p.category_id, p.price, p.tag FROM comments r INNER JOIN companies c ON r.company_id = c.id INNER JOIN posts p ON r.post_id = p.id WHERE r.company_id = :id'; $stmt = connect()->prepare($sql); $stmt->bindValue(':id', $id, PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetchall(PDO::FETCH_ASSOC); return $result; }
###実現したいこと
リストID(ここでは113)が重複したデータとなるので、113のデータは重複しないようにデータを抽出したい。
つまり、現状リストIDで113が3つ抽出されているが、1つだけでいい。
###試したこと
上記のようにdistinctを使ってみたが、post_idのカラムが結合されただけで重複したデータを除外できない。
SELECT DISTINCT リストID
のようにすると、定義されていないと出る。
副問合せで、
SELECT r.id AS リクエストID, r.company_id AS 企業ID, r.post_id AS リストID, r.text AS リクエストテキスト, r.created_at AS 最新のリクエスト送信日, c.id AS 企業ID, c.company_name, p.id AS リストID, p.title, p.category_id, p.price, p.tag (SELECT DISTICT リストID FROM comments) FROM comments r INNER JOIN companies c ON r.company_id = c.id INNER JOIN posts p ON r.post_id = p.id WHERE r.company_id = :id
みたいに書いてみたが、SQLの1064エラーが出る。






回答1件
あなたの回答
tips
プレビュー