2017-02-13 13 views
1

名前を付けたり、これをよく言い分ける方法がわかりません。そのために検索が歪んでしまいます。where条件問題のサブクエリ

私はこの声明を持っています。 、

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)

理由ビーイングは、私がその検索を行うときには、最新/最新の行を取得する必要があります:

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

はしかし、私は許可されていないこのようなものを、必要としますその最初のものでは、それは問題を引き起こしているわけではありません。 2番目のクエリは、私は動作するには声明のためのipが必要ですが、最新の投稿をつかむようにposts_at降順でグループ化する必要があります。

EDIT:内側のクエリの データベースサンプル: enter image description here

+4

あなたは集計関数を使用していません。なぜ、selectでgroup byを使用するのですか?最終的にあなたの目標を説明しようとする..最終的にあなたの質問を適切なデータサンプルと期待される結果で更新してください。 – scaisEdge

+1

投稿順posted_at降順で最新のレコードを返します –

+0

サンプルで更新しましたが、 –

答えて

1

私はあなたがORDER 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のみ(1列)、および1つのレコードのみ(ASC/DESCを適応させる)を返す必要がありますあなたが探しているものに

+0

これは同様に機能します(明らかに同じコードです)。完全なクエリでは完全ではありません。これは、私の質問を解決した別の回答を選択した理由です。この。助けてくれてありがとう、私はそれを感謝します! –