Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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中选择随机行_Mysql - Fatal编程技术网

在mysql中选择随机行

在mysql中选择随机行,mysql,Mysql,我有一个名为Mydata的表,如下所示 id name type -------------------------------------------- 1 vinu 1 2 rinu 2 3 dilu 1 4 raju 2 5 manu

我有一个名为Mydata的表,如下所示

     id        name          type
--------------------------------------------
     1         vinu            1
     2         rinu            2
     3         dilu            1
     4         raju            2
     5         manu            3
     6         saju            3
     7         ragu            3
     8         sonu            1
     9         sam             1
     10        rag             1
--------------------------------------------
     id            name            type
   -----------------------------------------
     1              vinu            1
     2              rinu            2
     5              manu            3
     3              dilu            1
     4              raju            2
     6              saju            3
     8              sonu            1
     7              ragu            3
     9              sam             1
     10             rag             1
 ----------------------------------------------
我想打印交替
类型的记录,例如:

类型为1的第一行
类型为2的第二行
类型为3的第三行
第四行类型=1
第五行类型=2,依此类推

要求的结果如下

     id        name          type
--------------------------------------------
     1         vinu            1
     2         rinu            2
     3         dilu            1
     4         raju            2
     5         manu            3
     6         saju            3
     7         ragu            3
     8         sonu            1
     9         sam             1
     10        rag             1
--------------------------------------------
     id            name            type
   -----------------------------------------
     1              vinu            1
     2              rinu            2
     5              manu            3
     3              dilu            1
     4              raju            2
     6              saju            3
     8              sonu            1
     7              ragu            3
     9              sam             1
     10             rag             1
 ----------------------------------------------

这不能通过原始SQL查询完成。提取需要显示的行,然后通过应用程序对其进行排序

或者。。。您可以编写存储过程,但我不建议这样做。您将需要一个临时表和一个游标(透明地创建另一个临时表)。对于一个应该经常执行的查询来说太多了。

示例数据:

CREATE TABLE t
    (`id` int, `name` varchar(4), `type` int)
;

INSERT INTO t
    (`id`, `name`, `type`)
VALUES
    (1, 'vinu', 1),
    (2, 'rinu', 2),
    (3, 'dilu', 1),
    (4, 'raju', 2),
    (5, 'manu', 3),
    (6, 'saju', 3),
    (7, 'ragu', 3),
    (8, 'sonu', 1),
    (9, 'sam', 1),
    (10, 'rag', 1)
;
查询:

SELECT id, name, type FROM (

    SELECT
    t.*,
    @rn := IF(@prev_type = type, @rn + 1, 1) AS rownumber,
    @prev_type := type
    FROM
    t
    , (SELECT @rn := 0, @prev_type := NULL) var_init_subquery
    ORDER BY type

) sq
ORDER BY rownumber, type
结果:

| id | name | type |
|----|------|------|
|  1 | vinu |    1 |
|  4 | raju |    2 |
|  5 | manu |    3 |
|  9 |  sam |    1 |
|  2 | rinu |    2 |
|  7 | ragu |    3 |
|  8 | sonu |    1 |
|  6 | saju |    3 |
| 10 |  rag |    1 |
|  3 | dilu |    1 |
  • 现场观看它的工作
警告:

当您有大量数据时,不要期望这会发生。它正在做一个全表扫描


当您对这些变量是如何工作的感兴趣时,可以阅读以下内容。

您尝试了什么?你需要输入你尝试过的代码。从Mydata ORDER BY RAND()中选择*,我想他不需要这个查询。他需要一个给定类型的顺序。塔伦,你认为这个问题和你的答案之间有什么关系?:)这是一个关键的问题,因为关系不太清楚,所以答案很难回答。永远不要说永远。我的答案中有一个可行的方法。不过,我同意,使用游标的存储过程会有点过分。这是一个非常好的答案