2012-01-11 28 views
1

我想從用戶中選擇最新的帖子,我正在尋找最有效的方式來做到這一點。MYSQL從表中選擇最新的帖子

目前這種選擇的第一篇文章,而不是最後:

$query = mysql_query(" 
        SELECT * 
        FROM posts 
        WHERE toID=fromID 
        GROUP BY fromID 
        ORDER BY date DESC LIMIT 3"); 

表結構:

表:帖子

id ToID FromID Post  State Date 
1 1  1  Hey   0  1325993600 
2 1  6  okay yeah 0  1325993615 
3 1  2  again  0  1325994600 
4 6  6  yeah2  0  1325995615 

所以從這個上面的例子中,它將返回ID:1和4.

toID = fromID只是爲了獲得狀態消息的帖子,意思是用戶在自己的頁面上發佈了一些內容,而不是其他人。

我想從最近3位已更新其狀態的用戶獲取最新狀態。

+0

什麼是'toID = fromID'?它會影響你的結果集嗎? – 2012-01-11 06:35:29

+0

您應該爲最新帖子使用時間戳。 – 2012-01-11 06:37:03

+0

我確實有時間戳,但id的作用與時間戳相同。 (它是自動遞增的) – 2012-01-11 07:02:57

回答

2

的ID的事情還是理論上的工作,前提是ID從未改變......

我會建議在所謂的「日期」表結構採用時間戳字段,並使用了「CURRENT_TIMESTAMP」作爲默認值,這將自動填充日期/時間在插入記錄...

訂購此領域DESC,極限X1

而且,我也經歷過出現由於分組錯誤的數據的情況很多.. 。在應用ORDER BY和LIMIT之前,確保你的數據是正確的

對於來自用戶1的user1獲得職位沒有必要按:

SELECT * FROM posts 
WHERE toID=fromID 
ORDER BY date DESC LIMIT 3 

爲了得到更大範圍*爲user1:

SELECT * FROM posts 
WHERE toID="USER1_ID" 
ORDER BY date DESC LIMIT 3 

對於從*獲得職位的user1,只有獨特的用戶:

SELECT * FROM posts 
WHERE toID="USER1_ID" 
GROUP BY FromID 
ORDER BY date DESC LIMIT 3 

有時您會遇到ORDER BY排序GROUPED記錄的問題,因爲ORDER BY應用於結果分組後應用......爲了實現一種變通方法:

SELECT * FROM (
    SELECT * FROM posts 
    WHERE toID="USER1_ID" 
    ORDER BY date DESC 
) as `derived` GROUP BY FromID LIMIT 3 

得到最後3個用戶誰最有最近發送自己的一個帖子:

SELECT * FROM (
    SELECT * FROM posts 
    WHERE toID=fromID 
    ORDER BY date DESC 
) as `derived` GROUP BY FromID LIMIT 3 
+0

我已添加更多詳情 – 2012-01-11 07:06:34

+0

我知道,我想從每位用戶處獲取最新狀態。看看我上面編輯過的帖子,我用一個例子添加了更多詳細信息 – 2012-01-11 07:12:30

+0

是的,我只需要每個用戶1個狀態,並且它需要是每個用戶的最新狀態。 – 2012-01-11 07:16:59

0

嘗試此查詢。

$query = mysql_query("SELECT * FROM posts WHERE toID=fromID GROUP BY id ORDER BY date DESC LIMIT 3"); 
+1

按ID分組?它的一個自動增量ID,它們是獨一無二的? – Prof83 2012-01-11 07:33:42