2017-02-13 71 views
1

我不知道如何更好地命名或說出這些,這會導致我的搜索出現偏差。子查詢中出現條件問題

我有這個聲明,它的工作原理。

SELECT username 
    , ip 
    FROM database.users 
WHERE ip = (SELECT ip 
       FROM database.users_chat_history 
       WHERE username = ? 
       limit 1); 

但是,我需要這樣的事情,這是不允許的:

SELECT username 
    , ip 
    FROM database.users 
WHERE ip = (SELECT ip 
        , posted_at 
       FROM database.users_chat_history 
       WHERE username = ? 
       group 
       by posted_at desc 
       limit 1); 

Error: ER_OPERAND_COLUMNS: Operand should contain 1 column(s)

原因是是我需要它這樣做搜索時搶最新/最近期的行,並與第一個,這不是這樣做,這是造成問題。第二個查詢,我只需要該語句的ip工作,但我需要它通過posted_at降序分組,因此它抓住了最新的職位。

編輯: 爲內部查詢數據庫樣本: enter image description here

+4

你沒有使用聚合函數..所以你爲什麼在select中使用group by?嘗試解釋你的目標是什麼。最終用適當的數據樣本更新你的問題和預期的結果 – scaisEdge

+1

order by posting_at desc將給你最新的記錄 –

+0

更新了樣本,但有人回答了它在下面的工作。 –

回答

1

我想你應該有順序重新 「分組依據」 BY子句。請看下圖:

SELECT username, ip FROM database.users WHERE ip = (SELECT ip FROM database.users_chat_history WHERE username = ? ORDER BY posted_at desc limit 1); 
+0

謝謝,這回答了。 –

+0

很高興幫助。 – Amila

1

我願意爲子查詢做這樣的事情:

SELECT ip FROM database.users_chat_history WHERE username = ? ORDER BY posted_at ASC LIMIT 1; 

未經檢驗,但應返回IP只(一列),而僅有一條記錄(ASC適應/ DESC)相應到你要找的東西

+0

這也適用(顯然,是相同的代碼),只是不完整的完整查詢,這就是爲什麼我選擇了其他答案作爲解決我的問題的一個,只是在某些人在未來的搜索和出現這個。感謝您的幫助,我很感激! –