【问题标题】:MariaDB loop not displaying results of queryMariaDB 循环不显示查询结果
【发布时间】:2019-02-15 00:08:47
【问题描述】:

我有一个简单的查询:

SELECT COUNT(ud.UserID), COUNT(DISTINCT ud.ProductID)
FROM users_data AS ud
    JOIN products AS t ON t.ID = ud.ProductID
WHERE ud.UserID = '3'

结果:

COUNT(ud.UserID)    COUNT(DISTINCT ud.ProductID)
519                 425

当我尝试包含在 while 或 for 循环中时:

DELIMITER //

SET @i = 0;
FOR i IN 1..10
DO SELECT COUNT(ud.UserID), COUNT(DISTINCT ud.ProductID)
  FROM users_data AS ud
    JOIN products AS t ON t.ID = ud.ProductID
  WHERE ud.UserID = (i)
END FOR
//

我没有得到以下输出:

Query executed OK, 0 rows affected.

还有什么我想念的吗?谢谢。

【问题讨论】:

    标签: mysql sql mariadb adminer


    【解决方案1】:

    为什么要使用loop?这作为一个简单的查询要好得多:

    SELECT ud.UserId, COUNT(*), COUNT(DISTINCT ud.ProductID)
    FROM users_data ud 
    GROUP BY ud.UserID;
    

    如果你想要特定的用户,你可以使用WHERE 子句:

    SELECT ud.UserId, COUNT(*), COUNT(DISTINCT ud.ProductID)
    FROM users_data ud 
    WHERE ud.UserId IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    GROUP BY ud.UserID;
    

    注意:我认为JOIN 是不必要的。

    【讨论】:

    • 我的意图是遍历一系列用户(例如 1-10)。当我尝试您的示例时,它似乎需要很长时间(我仍在等待 10 多分钟)。这是一个庞大的数据库,所以如果有办法快速返回一系列用户,效果会更好,谢谢!
    • 非常感谢,效果更好! (我最终使用了BETWEEN 1 AND 10 而不是1, 2, 3...,因为我需要指定不同的范围。
    【解决方案2】:

    问题的答案在DO 的定义中。它被定义为执行查询,然后丢弃结果。

    【讨论】:

      猜你喜欢
      • 2012-09-09
      • 2021-07-24
      • 1970-01-01
      • 2015-07-09
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多