2013-01-01 149 views
0

我有一個帶有以下行的答案示例表。因爲它是根據id帶着疑問表連接的ID可以重複(即一個問題可以有多個答案)選擇具有相同ID的下一條記錄

answers.id | answers.username | answer | date 
    1  |  mikha  | you | 2013-01-01 00:00:00 
    1  |  maricela  | really | 2013-01-01 00:00:00 
    1  |  guy  | rock | 2013-01-01 00:00:00 

有一個查詢我可以使用「maricela」的回答後,選擇所有的行?

類似的東西來:

SELECT * FROM answers WHERE id = 1 AND answers.username > 'maricela' 

但上面將返回0行作爲做像上面會按字母順序選擇並傢伙字母是maricela之前。

有沒有什麼方法可以選擇一行一行的值(s)?排後ID=1USERNAME=mariclea

+1

您的意思是您想要選擇在您提到的表格之後物理存儲在表格中的行嗎?有答案的主鍵嗎? –

+4

關係數據庫中的行沒有任何隱式順序。所以你需要有一個專欄,告訴我們爲什麼你的例子中的'guy'是'maricela'之後的'id'和'日期列'是相同的值。如果你沒有這樣的專欄,那麼你不能可靠地說''人'是'maricela'之前還是之後。 –

+0

有一個主鍵'PRIMARY KEY('id','username')'id,因爲用戶只能回答一次問題,所以有id和username的唯一組合。所以mikha不能回答ID 1兩次,但ID 1可以通過mikha,maricela和guy回答,但是他們不能給出多於一個的回答...謝謝@IanGregory –

回答

0

在我腦海裏出現了一些東西:如果你的「後」的概念與時間有關(即在「maricela」之後插入答案),那麼你可以考慮爲答案表添加DATE/TIME列。這樣,您將確保一些答案比別人後面給出

+0

哦,我剛剛注意到已經有日期列了..以及你可以添加小時:min:sec.millisec部分 – pianoforte

+0

事實上,或者一個自動增量序列號對於單個數據庫實例將提供相同的排序(除了out-有序提交)。 –

2

我會強烈建議你在你的答案表中添加一個唯一的ID,並具有用於連接到問題的表新列:

question_id | id | username | answer | date 
    1  | 1 | mikha | you | 2013-01-01 00:00:00 
    1  | 2 | maricela | really | 2013-01-01 00:00:00 
    1  | 3 | guy  | rock | 2013-01-01 00:00:00 

那麼你可以使用:

SELECT * FROM answers WHERE id > (
    SELECT id FROM answer WHERE username = 'maricela' and question_id = 1 
) 
0

這將簡單地做,

SELECT b.* FROM table1 b WHERE b.id> 
(SELECT a.id FROM table1 a WHERE a.username='maricela' 
and a.answer_id=1) 

Live SQL Demo

+0

這給了我一個語法錯誤'#1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,在'EXISTS(SELECT a.username FROM回答第1行的WHERE a.username = b.username和a.user')附近使用正確的語法'還有,如果'maricela '正在回答其他ID?我需要具體說明'ID = 1'謝謝:) –

+0

現在就試試。如果顯示錯誤,則在此評論窗口中發佈您的代碼。 – Mari

+0

'#1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'EXISTS(SELECT a.username FROM回答WHERE a.username = b.username和a.usern'第1行'')附近使用正確的語法。 –

相關問題