2012-12-24 65 views
2

我有如下表:PHP MySQL的獲取下一個和以前的ID從數據庫

**id**   **username**   **activity** 
1    user1     activity-like 
2    user1     activity-share 
3    user3     activity-like 
4    user4     activity-like 
5    user1     activity-share 
6    user6     activity-like 
8    user1     activity-share 
9    user3     activity-like 
10    user5     activity-share 

(注:沒有ID = 7)

我試圖使用PHP,MySQL來獲取user1所做的活動並獲取該id。在這種情況下,活動具有id(1,2,5和8)。

$currentId = 5; 

我想獲取下一個和以前的ID(如果它們存在的話)(在本例中爲2和8)。

$fetch = mysql_query("SELECT * FROM `main` WHERE `username` = 'user1' AND id > '$id'"); 
if(mysql_num_rows($fetch) == 1){ 
while(){ 

} 
$result = $fetch['id']; 
} 

我不知道該如何編寫查詢。

回答

5

你可以做這樣的事情:

對於下一個ID,

SELECT id from tablename where username = 'user1' AND id > $currentId ORDER BY ID ASC LIMIT 1; 

對於之前的ID,

SELECT id from tablename where username = 'user1' AND id < $currentId ORDER BY ID DESC LIMIT 1; 
1

我想你可以如下使用union查詢:如果它存在和第二應該返回ID = 8

(SELECT ID, USERNAME, ACTIVITY FROM MAIN WHERE username = 'user1' AND ID < '$id' 
ORDER BY ID DESC LIMIT 1) 
UNION 
(SELECT ID, USERNAME, ACTIVITY FROM MAIN WHERE username = 'user1' AND ID > '$id' 
ORDER BY ID ASC LIMIT 1); 

首先查詢片段應該返回ID = 2

+0

我相信,MySQL將需要'UNION'的每一個部分是用'()'括起來,以便擁有自己的'ORDER BY'子句。 '(SELECT * ... ORDER BY ID DESC LIMIT 1)UNION(SELECT ... ORDER BY ...)' –

+0

也會注意到在UNION查詢中'SELECT *'不可取。明確列列表。 –

+0

@MichaelBerkowski:更新了這兩個建議的答案,因爲我沒有看到他們的任何缺點。謝謝! –

相關問題