不使用 PHP 的 MySQL 查询循环帮助

标签 mysql loops

我有以下查询:

SET @year1 = 2011;

select  B.YearID, sum(B.ab), sum(B.h), sum(B.h)/ sum(B.ab)
    From Batting B join Pitching P 
    on (P.playerID = B.playerID and B.yearID = P.yearid and B.ab > 0 ) 

        where  B.yearid = @year1

这可以很好地检索一年的结果。但是我可以在 mySQL 上使用循环来执行查询并查看每年的结果吗?

此代码不起作用并产生语法错误:

SET @year1 = 2011;

While @year1 <= 2014 DO

SET @year1 = @year1 + 1;

select  B.YearID, sum(B.ab), sum(B.h), sum(B.h)/ sum(B.ab)
    From Batting B join Pitching P 
    on (P.playerID = B.playerID and B.yearID = P.yearid and B.ab > 0 ) 

        where  B.yearid = @year1;
End While

我可以在 MySQL 中编写查询还是必须使用 PHP 等语言?

最佳答案

最简单的使用分组方式:

select  B.YearID, sum(B.ab), sum(B.h), sum(B.h)/ sum(B.ab)
From Batting B join Pitching P 
on (P.playerID = B.playerID and B.yearID = P.yearid and B.ab > 0 ) 
where b.yearid>=2011 and b.yearid<=2014
group by B.yearid;

这将立即为您提供列表。

在存储过程中也可以使用循环,但是出于语法原因,您必须使用 WHILE:

CREATE PROCEDURE someProcedure(IN start_year INT, end_year INT) 
BEGIN
  DECLARE v_year_id INT;
  SET v_year_id=start_year;
  WHILE(v_year_id<end_year)
  LOOP
    select  B.YearID, sum(B.ab), sum(B.h), sum(B.h)/ sum(B.ab)
    From Batting B join Pitching P 
    on (P.playerID = B.playerID and B.yearID = P.yearid and B.ab > 0 ) 
    WHERE yearId=v_year_id;
    group by B.yearid; 
    SET v_year_id=v_year_id+1;
  END WHILE;
END;

局部变量 v_year_id 也可以删除,但为了清楚起见已添加到此处。如果你消除 v_year_id 它看起来像:

CREATE PROCEDURE someProcedure(IN start_year INT, end_year INT) 
BEGIN
  WHILE(start_year<end_year)
  LOOP
    select  B.YearID, sum(B.ab), sum(B.h), sum(B.h)/ sum(B.ab)
    From Batting B join Pitching P 
    on (P.playerID = B.playerID and B.yearID = P.yearid and B.ab > 0 ) 
    WHERE yearId=start_year;
    group by B.yearid; 
    SET start_year=start_year+1;
  END WHILE;
END;

调用过程将完成:

CALL someProcedure(2011,2014);

关于不使用 PHP 的 MySQL 查询循环帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31388108/

相关文章:

php - 使用 PDO 获取最后插入的行 ID(不合适的结果)

c - 为什么我无法初始化指针变量并且无法使用gets?

java - 如何在Java中通过递增循环获取数字递增的变量(以获取所述变量的值)?

java - JTable Unknown 错误,该怎么办?

mysql - .\libraries\classes\Plugins\AuthenticationPlugin.php#226 中的错误警告是什么,无法使用 phpmyadmin 在 mysql 中使用标量值作为数组

MySQL 复制 - 如何清除从站的主站状态

php - 在Android(模拟器)中连接服务器数据库

mysql - MySQL 中的 generate_series() 等价物

python - 子集总和 : Why is DFS + pruning faster than 2 for loop?

ios - 快速添加时间字符串