mysql - SQL 嵌套 if 在具有存在并检查时间戳的函数内部

标签 mysql sql stored-functions

我需要检查数据库中是否存在 VIP 并且他的时间没有过期。如果不是这个问题,一切都会好起来的:如何创建存储此功能的 bool 函数?

CREATE DEFINER=`root`@`localhost` FUNCTION `IsVip`(steamId VARCHAR(17)) RETURNS tinyint(1)
BEGIN
RETURN EXISTS (SELECT SteamId, Expired FROM Vips WHERE SteamId=steamId AND Expired >= NOW());
END

这是我的解决方案,但是这个男女混合有效吗 - 我的意思是 SELECT 语句?

CREATE DEFINER=`root`@`localhost` FUNCTION `IsVip`(steamId VARCHAR(17)) RETURNS tinyint(1)
BEGIN
IF (SELECT VipId FROM Vips WHERE SteamId = steamId AND Expired >= NOW())
    THEN
        RETURN TRUE;
    ELSE
        RETURN FALSE;
END IF;
END

最佳答案

假设 Vips 表中的每个 SteamID 只有一行,我会这样做:

SELECT 1 FROM Vips WHERE SteamId = ? AND Expired >= NOW();

当用户有效(即存在且未过期)时,这将返回值为 1 的单行,如果用户有效,则返回空记录集。

另一种选择:

SELECT COUNT(*) FROM Vips WHERE SteamId = ? AND Expired >= NOW()

将始终返回一个结果集,其中单个记录包含 1(如果用户有效)或 0(如果用户无效)。

关于mysql - SQL 嵌套 if 在具有存在并检查时间戳的函数内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54602074/

相关文章:

MySQL 存储函数 : CONTAINS SQL or NO SQL?

sql-server - 包含在函数中的 Select 语句不能将数据返回给 client_New

mysql - 使用 AND 代替 COMMA 时更新语句不会产生语法错误

mysql - 顺序 sql 树层次结构

php - 在 mysql 上的 PDO 中启用自动提交并将自动提交设置为关闭

mysql:批量删除并重新创建带有新排序规则的函数

sql - PostgreSQL - 左连接错误计数输出

mysql - Mysql 更新字符串日期时间

mysql - 如何将查询结果放入 SQL 函数的返回变量中

MySQL:UNION 是我要找的吗? (将行分解为多行返回)