SQL 嵌套如果在函数内部且存在并检查时间戳
SQL nested if inside of a function with exist and checking timestamp
我需要检查数据库中是否存在 VIP 并且他的时间没有过期。如果没有这个问题,一切都会很好:如何创建将存储此功能的布尔函数?
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
table 中每个 SteamID
只有一行,我会这样做:
SELECT 1 FROM Vips WHERE SteamId = ? AND Expired >= NOW();
当用户有效(即存在且未过期)时,这将 return 一个值为 1
的单行,否则将是一个空记录集。
另一种选择:
SELECT COUNT(*) FROM Vips WHERE SteamId = ? AND Expired >= NOW()
将始终 return 一个结果集,如果用户有效,单个记录包含 1
,否则 0
。
我需要检查数据库中是否存在 VIP 并且他的时间没有过期。如果没有这个问题,一切都会很好:如何创建将存储此功能的布尔函数?
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
table 中每个 SteamID
只有一行,我会这样做:
SELECT 1 FROM Vips WHERE SteamId = ? AND Expired >= NOW();
当用户有效(即存在且未过期)时,这将 return 一个值为 1
的单行,否则将是一个空记录集。
另一种选择:
SELECT COUNT(*) FROM Vips WHERE SteamId = ? AND Expired >= NOW()
将始终 return 一个结果集,如果用户有效,单个记录包含 1
,否则 0
。