2017-10-18 101 views
-2

我有這個疑問偉大的工程SELECT語句之前的ORDER?

$sub_query = "SELECT * FROM posts WHERE post_status = 'published' AND 
post_user = '{$out}' ORDER BY post_id DESC "; 

查詢帶回全部由降序帖子ID訂購了特定用戶的職位。問題在於它循環遍歷每個發佈用戶並相應地訂購它們,但我希望最新的發佈不僅僅是每個用戶的最新發布。

這是效果的圖像,希望能夠幫助更好地解釋 ORDER before SELECT statement ORDER before SELECT statement

ORDER before SELECT statement ORDER before SELECT statement

你可以看到,查詢特定用戶運行,然後移動到下一個用戶,其中,我試圖先獲取最新的帖子ID

我試圖按照此similar question但它帶來了相同的結果秒。

$sub_query = "SELECT * FROM (SELECT * FROM posts ORDER BY post_id DESC) 
T WHERE post_status = 'published' AND post_user = '{$out}' "; 

我可以先訂購所有選定的文章嗎?然後用我的where語句?

+4

的圖像沒有多少解釋你想要的這裏。請編輯您的問題,刪除圖片,然後向我們展示樣本表格數據以及您的預期輸出。 –

+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

如果您還沒有收到消息,請從您的問題中刪除圖片,然後參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-看起來對我來說是一個非常簡單的sql查詢 – Strawberry

回答

0

如果希望每個用戶的最新帖子,然後取出where並添加limit

SELECT p.* 
FROM posts p 
WHERE p.post_status = 'published' 
ORDER BY post_id DESC 
LIMIT 1; 
+0

我仍然需要WHERE post_user ='{$ out}',因爲這些是特定用戶 – Brad

+0

是啊把一個'AND'然後把你的'post_user ='{$ out}''。 – Sand

+0

@Sand返回一個錯誤mysqli_fetch_assoc()期望參數1爲mysqli_result,布爾值給出 – Brad

0

我不明白,如果你正在尋找的是 1)每個帖子的最後名單用戶 2)所有帖子按最新排序(無論用戶)的列表 在這兩種情況下,你不需要循環所有用戶,你可以提取僅使用查詢本身排序的數據(我強烈建議你在這個解決方案)。

選項1:

SELECT * 
FROM posts 
WHERE post_id IN (
    SELECT MAX(post_id) 
    FROM posts 
    WHERE post_status = 'published' 
    GROUP BY post_user 
) 
ORDER BY post_user ASC 

選項2:

SELECT * 
FROM posts 
WHERE post_status = 'published' 
post_id DESC