我正在尝试编写一个存储过程,用
搜索一个相当简单的数据库同一个用户可以拥有多个游戏。现在,我希望能够根据特定类型和某个特定游戏获得用户,以便例如我可以获得所有用户,比如type1,并且与游戏一起说game2和game5。我认为我可以通过将它们作为字符串参数传递来解决几个游戏名称的问题,并做一些HAVING LIKE条件(我称之为get_user_spec('type1','game3,game5'))。 到目前为止,我达到了这一点:
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_user_spec`(
IN inTypeName VARCHAR(50),
IN inGameName VARCHAR(150)
)
BEGIN
PREPARE statement FROM
"SELECT u.user_id,t.type_name,GROUP_CONCAT(g.game_name) AS game
FROM user u
INNER JOIN user_type ut
ON u.user_id=ut.user_id
INNER JOIN type t
ON ut.type_id=t.type_id
LEFT JOIN user_game ug
ON u.user_id=ug.user_id
LEFT JOIN game g
ON ug.game_id=g.game_id
WHERE t.type_name=?
GROUP BY u.user_id
HAVING game LIKE CONCAT('%',?,'%')
ORDER BY u.user_id";
SET @p1=inTypeName;
SET @p2=inGameName;
EXECUTE statement USING @p1,@p2;
END
但我真正的问题是,如果我没有传递任何游戏名称,那么我想让所有用户获得type1(然后我调用get_user_spec('type1',NULL)。但是我没有得到任何东西作为程序见
HAVING game LIKE CONCAT('%',NULL,'%').
我希望这很清楚。如果有人有任何解决这个问题的建议,我将非常感激。 非常感谢你。
答案 0 :(得分:1)
更改此行:
EXECUTE statement USING @p1,@p2;
到
EXECUTE statement USING @p1, ifnull(@p2, '');
这会导致LIKE
表达式只是'%%'
,这意味着“匹配所有内容”