我需要确认VIP是否存在于DB中,他的时间还没有过期。如果不是这个问题,一切都会很好:如何创建能够存储此功能的布尔函数?
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
这是我的解决方案,但这是否是一个有效的选择语句呢?
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
发布于 2019-02-08 16:46:16
假设每个SteamID
在Vips
表中只有一行,我只需要这样做:
SELECT 1 FROM Vips WHERE SteamId = ? AND Expired >= NOW();
当用户有效时(即存在且未过期),这将返回一个值为1
的一行,如果不返回,则返回一个空记录集。
另一种选择:
SELECT COUNT(*) FROM Vips WHERE SteamId = ? AND Expired >= NOW()
将始终返回一个结果集,其中包含一个记录,如果用户有效,则包含1
;如果没有,则返回0
。
https://stackoverflow.com/questions/54602074
复制