Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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_Stored Procedures_Count_Rowset - Fatal编程技术网

MySQL,存储过程,如何从两个查询中获取结果,更新求解

MySQL,存储过程,如何从两个查询中获取结果,更新求解,mysql,stored-procedures,count,rowset,Mysql,Stored Procedures,Count,Rowset,我的程序是:这是一个计划 delimiter // CREATE PROCEDURE get_random_data() BEGIN Declare Count_a INT; SELECT Floor(Count(`id_x`) * Rand()) INTO Count_a From `x_data` Where `ok_w` = 1 And `active` = 2 And `time` >= Unix_timestamp(); # Now We s

我的程序是:这是一个计划

  delimiter //
  CREATE PROCEDURE get_random_data()
  BEGIN
  Declare Count_a INT;
      SELECT Floor(Count(`id_x`) * Rand()) INTO Count_a From `x_data`  Where `ok_w` = 1 And `active` = 2 And `time` >= Unix_timestamp();

   # Now We select Some Rows
   SELECT `id_x` From `x_data` Where `spec` = 1 Limit Count_a,3;

   # And if Count of this select is small than < 3

   IF(row_count() < 3) then
      SELECT `id_anonsu` From `x_data` Where `spec` = 0 Limit Count_a,2;
   END IF ;


  END//
  delimiter ;
//目标

如何从两个查询中获得结果? //一个来自if语句之前的查询


//从语句中的查询中选择第二个,若第一个查询计数小于3,则取决于您使用的客户端接口。例如,JDBC有statement.getMoreResults


有趣的是,查询同时包含delimeter//和//注释。

好的,我找到了答案

原代码:

   IF(row_count() < 3) then
       SELECT `id_anonsu` From `x_data` Where `spec` = 0 Limit Count_a,2;
   END IF ;
具有隐藏计数的版本

    DROP PROCEDURE IF EXISTS test;
    Delimiter //
    CREATE PROCEDURE test(OUT w INT)
    BEGIN
    Declare Counter_a INT DEFAULT 0;


        Set @id_counter = 0;

        SELECT Floor(Count(`id_x`) * Rand()) INTO Counter_a From `x_data`  Where `ok_w` = 1 And `active` = 2 And `time` >= Unix_timestamp();

        SELECT `id_x` From `x_data` Where @id_counter := @id_counter + 1 And `spec` = 1 Limit Counter_a,3;


        IF @id_counter < 3 THEN 
            Set Counter_a = Counter_a + 1;
            SELECT `id_x` From `x_data` Limit Counter_a,2;


        END IF;

        Set w = @id_counter;


    END //
    Delimiter ;
@小费

它必须在所有条件之前在哪里

例如:

[.....] Where @id_counter := @id_counter + 1 And `field_2` > 1 LIMIT 0, 5;
将始终返回1

正确版本

[.....] Where `field_2` > 1 And  [Other conditions] And @id_counter := @id_counter + 1  LIMIT 0, 5;

我真的不明白你的问题…你想从两个查询中得到结果吗?获取结果和行集是什么意思?是的,我想从这两个查询中获取结果。我使用mysql命令行,但在执行5x之后,我总是只得到一个结果。。
    DROP PROCEDURE IF EXISTS test;
    Delimiter //
    CREATE PROCEDURE test(OUT w INT)
    BEGIN
    Declare Counter_a INT DEFAULT 0;


        Set @id_counter = 0;

        SELECT Floor(Count(`id_x`) * Rand()) INTO Counter_a From `x_data`  Where `ok_w` = 1 And `active` = 2 And `time` >= Unix_timestamp();

        SELECT `id_x` From `x_data` Where @id_counter := @id_counter + 1 And `spec` = 1 Limit Counter_a,3;


        IF @id_counter < 3 THEN 
            Set Counter_a = Counter_a + 1;
            SELECT `id_x` From `x_data` Limit Counter_a,2;


        END IF;

        Set w = @id_counter;


    END //
    Delimiter ;
  mysql> Call test(@z); Select @z;
  +-----------+
  |   id_x    |
  +-----------+
  |         7 |
  |         8 |
  +-----------+
  2 rows in set (0.00 sec)

  +-----------+
  |   id_x    |
  +-----------+
  |         8 |
  +-----------+
  1 row in set (0.01 sec)

  Query OK, 0 rows affected (0.01 sec)

  +------+
  | @z   |
  +------+
  |    2 |
  +------+
  1 row in set (0.00 sec)
 @id_counter := @id_counter + 1
[.....] Where @id_counter := @id_counter + 1 And `field_2` > 1 LIMIT 0, 5;
[.....] Where `field_2` > 1 And  [Other conditions] And @id_counter := @id_counter + 1  LIMIT 0, 5;