1

我有一个查询,它给出以下结果:

UserID | Message
1      | Hello 
1      | How are ya? 
2      | yadda yadda 
5      | Cool.
5      | I didn't know that.

我现在想确定结果。不是我返回的行数,而是我想要查看消息的不同用户的数量。

“给我前 2 个用户的消息”

这是我想要的结果:

UserID | Message
1      | Hello 
1      | How are ya? 
2      | yadda yadda 

但是如果我写“LIMIT 2”,它只会给我

UserID | Message
1      | Hello 
1      | How are ya? 

我如何实现我想要的?我需要的 KEYWORD 是什么?

...因为人们要求我提供表格结构...

TBALE Users ( UserID, UserNick, ...)
TABLE Messages ( FromUserID, theMSG, ... ) 

填写如下:

Users: 
UserID | UserNick
3      | Joe 
23     | Peter 
4      | Marry 

Messages: 
FromUserID | theMSG 
3          | Hi
3          | What' up?
23         | asdfg 
23         | OK... 
4          | Hi, this is Marry 

非常感谢。

4

3 回答 3

1

我认为您需要使用这样的嵌套查询:

SELECT * FROM messages 
WHERE UserID IN
    (SELECT DISTINCT UserID FROM messages ORDER BY UserID LIMIT 2)

但是不知道表结构就很难说更多了。

这个想法是:

  • 在嵌套查询中获取您想要的用户
  • 通过外部查询获取他们的消息
于 2013-08-23T14:12:42.143 回答
0

如果我理解您的问题,您可以通过以下方式获得这些结果:

SELECT * FROM table WHERE UserID IN(1, 2)

或者

SELECT * FROM table WHERE UserID BETWEEN 1 AND 2
于 2013-08-23T14:15:31.300 回答
0

您可以使用以下查询。它为您提供选择first n唯一用户或last n唯一用户的选项。用于ASC第一个或DESC最后 n 个用户。

SELECT * 
FROM messages 
WHERE UserID IN (
           SELECT DISTINCT UserID 
           FROM messages 
           ORDER BY UserID ASC/DESC 
           LIMIT 2
)
LIMIT 2
  1. 内部限制定义您要选择的唯一用户数。
  2. 外部限制定义您希望从用户那里看到的消息数量
于 2013-08-23T14:19:44.997 回答