2017-10-04 129 views
-1

我正在使用這個SQL查詢,但我得到重複。我如何確保每個inst_id只有一個帖子被提取?我想這是我通過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只有一個職位是牽強?

因爲您沒有提供任何示例數據,但是您提到您正在獲取重複行。然後,您可以使用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,使得它發生的是我的組,

可能。

但我得到一個錯誤,如果我沒有它,因爲我按它排序。

不,您正在收到錯誤,因爲您提到了main_posts.c_p_idGROUP BYORDER 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中的匹配項。這就像它找到了兩場比賽,但選擇顯示不是從main_posts。我會看看如果我能弄清楚如何給你提供數據。我對不同的表格以及如何呈現它感到困惑。 – SeaBass