Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 具有特定限制的SQL_Mysql_Sql - Fatal编程技术网

Mysql 具有特定限制的SQL

Mysql 具有特定限制的SQL,mysql,sql,Mysql,Sql,我有下一个示例表: id | user_id | data ------------------- 1 | 1 | 10 2 | 2 | 10 3 | 2 | 10 4 | 1 | 10 5 | 3 | 10 6 | 4 | 10 7 | 4 | 10 8 | 5 | 10 9 | 5 | 10 10 | 2 | 10 11 | 6 | 10 12

我有下一个示例表:

id | user_id | data
-------------------
1  | 1       | 10
2  | 2       | 10
3  | 2       | 10
4  | 1       | 10
5  | 3       | 10
6  | 4       | 10
7  | 4       | 10
8  | 5       | 10
9  | 5       | 10
10 | 2       | 10
11 | 6       | 10
12 | 3       | 10
13 | 1       | 10
我需要创建一个SELECT查询来限制我的数据。例如,我有一个限制范围(1,3)(页码=1,行数=3)。它应该选择具有前3个唯一用户id的行。如果在表的末尾有一些行具有第一个
用户id
,则应将它们包括在结果中。LIMIT语句不适合此查询,因为我可以获得3行以上的数据。我的限额的输出应为:

id | user_id | data
-------------------
1  | 1       | 10
2  | 2       | 10
3  | 2       | 10
4  | 1       | 10
5  | 3       | 10
10 | 2       | 10
12 | 3       | 10
13 | 1       | 10

你能帮我生成这个查询吗?

像这样的东西怎么样

SELECT * FROM table WHERE user_id BETWEEN (number) AND (number+row count)

我知道它不起作用,但你应该能让它起作用^^

像这样的东西怎么样

SELECT * FROM table WHERE user_id BETWEEN (number) AND (number+row count)
我知道它不起作用,但你应该能够让它起作用^^

怎么样:

SELECT *
  FROM table
    WHERE user_id IN 
    (SELECT distinct(user_id) FROM table order by user_id LIMIT 3);
那么:

SELECT *
  FROM table
    WHERE user_id IN 
    (SELECT distinct(user_id) FROM table order by user_id LIMIT 3);

下面的示例代码可用于Oracle和Mysql。(对SQL Server和Sybase使用
TOP

您可以从表(
t1
)中获得与前3个
用户id
t2
)匹配的所有结果(查看MySQL手册中的限制功能)


对于接下来的3个id,将
限制0,3
更改为
限制3,6

以下示例代码可用于Oracle和Mysql。(对SQL Server和Sybase使用
TOP

您可以从表(
t1
)中获得与前3个
用户id
t2
)匹配的所有结果(查看MySQL手册中的限制功能)


对于接下来的3个id,请将
限制0,3
更改为
限制3,6

谢谢。是的。但是MySQL版本5.0.5:1此版本的MySQL还不支持根据的“LIMIT&IN/ALL/ANY/SOME子查询”,它们都受支持。至少如果没有“IN”,我想不出一个方法来做这件事。@garvey:对。太糟糕了。你不能更新更新的版本吗?5.0有点过时了。谢谢。是的。但是MySQL版本5.0.5:1此版本的MySQL还不支持根据的“LIMIT&IN/ALL/ANY/SOME子查询”,它们都受支持。至少如果没有“IN”,我想不出一个方法来做这件事。@garvey:对。太糟糕了。你不能更新更新的版本吗?5.0有点过时。如果用户id不符合顺序,这将不起作用。例如,如果表包含user_id 1、2、4,并且缺少user_id 3,则此查询将返回较少的行数。问题提到结果应该包含前3个唯一用户id的行。它表示前3个唯一用户id。因此我假设前3个唯一用户id位于数字(1)之后。在OP的示例中,前3个id是1、2、3,但在其他一些情况下,它们可能是2、5、7(因为1、3、4、6因某种原因被删除)。你的解决方案当时不起作用。确实如此,但它给我的印象是,它是关于一个数字序列的。如果用户id不在序列中,这将不起作用。例如,如果表包含user_id 1、2、4,并且缺少user_id 3,则此查询将返回较少的行数。问题提到结果应该包含前3个唯一用户id的行。它表示前3个唯一用户id。因此我假设前3个唯一用户id位于数字(1)之后。在OP的示例中,前3个id是1、2、3,但在其他一些情况下,它们可能是2、5、7(因为1、3、4、6因某种原因被删除)。你的解决方案当时不起作用。确实如此,但它给我的印象是它是关于一系列数字的。
LIMIT
不受Oracle支持——MySQL、SQLite和PostgreSQL支持
LIMIT
TOP
仅适用于SQL Server 2000+。
LIMIT
不受Oracle支持——MySQL、SQLite和PostgreSQL支持
LIMIT
<代码>顶部仅为SQL Server 2000+版本。