2017-10-04 17 views
-1

私はこのSQLクエリを使用していますが、重複があります。 inst_idごとに1つの投稿のみが取得されるようにするにはどうすればよいですか?私はそれが起こるmain_posts.c_p_idで私のグループだと思うが、私はそれによって並べ替えているので、私はそれを持っていない場合はエラーが発生します。基本的に私は最初にmain_posts.c_p_idに一致する投稿を並べ替えて入れようとしています。SQLクエリから重複を取得していますか?

SELECT main_posts.c_p_id, insts.inst_id, insts.inst_title 
    FROM insts 
    LEFT JOIN inst_posts 
    ON inst_posts.instp_inst_id = insts.inst_id 
    LEFT JOIN main_posts 
    ON main_posts.c_id = insts.instp_c_id 
    GROUP BY insts.inst_id, main_posts.c_p_id 
    ORDER BY main_posts.c_p_id DESC, insts.inst_title ASC 
+1

**警告**:ユーザーデータがクエリ内で使用されるため、これには重大な[SQLインジェクションのバグ](http://bobby-tables.com/)があります。可能な限り**準備文**を使用してください。これらは[mysqli](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と[PDO](http://php.net/manual/)で行うのはかなり簡単です。 en/pdo.prepared-statements.php)ここで、ユーザが提供するデータは '?'または ':name'のインジケータで指定され、後で' bind_param'や 'execute'を使ってデータを入力します。 ** '$ _POST'、' $ _GET'、または任意のユーザーデータを直接クエリに入れないでください。 – tadman

+0

私はそれを得るが、誰がPOSTやGETについて何か言った? – SeaBass

+0

どのような形式のユーザーデータも危険です。 '$ p_id'はどこから来たのですか? '$ tagged'とは何ですか?それが明白でない場合、それはエスケープされ、それから我々が推測することができるのは、エスケープされていないということだけです。プレースホルダの値によって、すべてが正しく行われていることが明らかになり、間違いを隠すことはできません。 – tadman

答えて

0

どのように私はINST_IDごとに1つだけのポストがフェッチされていることを確認することができますか?

サンプルデータは提供していませんが、重複する行があると言われています。次に、別の行を表示するのにDISTINCTを使用できます。

SELECT DISTINCT main_posts.c_p_id, insts.inst_id, insts.inst_title 
    FROM insts 
    LEFT JOIN inst_posts 
    ON inst_posts.instp_inst_id = insts.inst_id 
    LEFT JOIN main_posts 
    ON main_posts.c_id = insts.instp_c_id 
    GROUP BY insts.inst_id, main_posts.c_p_id 
    ORDER BY main_posts.c_p_id DESC, insts.inst_title ASC 

私はそれはおそらく、それが起こる作ることmain_posts.c_p_idによって

私のグループだと思います。

しかし、私はそれによって並べ替えているので、私はそれを持っていない場合、私はエラーが発生します。

あなたはGROUP BYmain_posts.c_p_id列を言及している、ので、いいえ、あなたは、エラーを取得しています。 ORDER BYはレコードを注文するだけで、この列を選択するかどうかは関係ありません。

+0

ありがとう!私は前にそれを試しましたが、main_postsのマッチのいくつかを除外しました。これは 'main_posts.c_p_id DESC'を置くのですが、' main_posts.c_p_id'によってグループが必要になりました。申し訳ありませんが、私はこれをあまりよくしていません。 – SeaBass

+1

@SeaBass次に、あなたのデータと予想される出力を少なくとも表示する必要があります。 – Ravi

+0

私がmain_postで注文してもグループから削除する場合は、mysqli_query($ db_link、 "SET SESSION sql_mode = 'TRADITIONAL'") 'を動作させるためにこれを実行する必要がありますが、main_postsからのマッチも除外します。それは2つの試合を見つけたが、main_postsからではない試合を見せるようなものだ。私はあなたにデータを与える方法を理解できるかどうかを見ていきます。私は別のテーブルとそれを提示する方法について混乱しています。 – SeaBass

関連する問題