我需要检查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


这是我的解决方案,但这是有效的吗-我的意思是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

最佳答案

假设SteamID表中每个Vips仅一行,我将这样做:

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


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

另外的选择 :

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


将始终返回一个结果集,如果用户有效,则该记录包含一个包含1的记录,否则为0

10-07 12:35