Mysql 简单选择程序
我在MySQL中有这个过程Mysql 简单选择程序,mysql,sql,Mysql,Sql,我在MySQL中有这个过程 DROP PROCEDURE IF EXISTS `AddNotificationOnPosts`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `AddNotificationOnPosts`(from_user INT(11),on_post_id INT(11),in_group_id INT(11)) BEGIN DECLARE num_rows INT DEFAULT 0;
DROP PROCEDURE IF EXISTS `AddNotificationOnPosts`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `AddNotificationOnPosts`(from_user INT(11),on_post_id INT(11),in_group_id INT(11))
BEGIN
DECLARE num_rows INT DEFAULT 0;
SELECT count(notification_id) FROM notifications_posts
WHERE from_user = 1;
END $$
DELIMITER ;
这张桌子呢
notification_id from_user on_post_id in_group_id date
2 1 162 3 2012-07-11 12:01:08
3 19 163 1 2012-07-11 12:03:26
4 19 164 1 2012-08-10 17:42:36
5 1 165 3 2012-08-29 12:14:01
6 1 165 3 2012-08-29 12:14:29
当我执行:
SET @p0 = '1';
SET @p1 = '2';
SET @p2 = '3';
CALL `AddNotificationOnPosts` ( @p0 , @p1 , @p2 );
它给了我:
count(notification_id)
5
为什么??因为它们只有3条用户id为1的记录
以及我如何制定该程序以:
SELECT count(notification_id) FROM notifications_posts
WHERE from_user = @from_user;
您应该为参数使用不同的名称:
CREATE PROCEDURE AddNotificationOnPosts
(arg_from_user INT(11),arg_on_post_id INT(11),arg_in_group_id INT(11))
BEGIN
DECLARE num_rows INT DEFAULT 0;
IF(arg_from_user IS NULL OR arg_from_user = '')
THEN
SELECT "Error:Invalid argument for userID" AS error_code;
ELSE
SELECT count(notification_id)
INTO num_rows
FROM notifications_posts
WHERE from_user = arg_from_user;
END IF;
SELECT num_rows;
END $$
因此,解决方案是重命名vars?,而“error_code”是保留关键字?或者与“选择列作为“酷名”相同…?(别名)不,这只是一个别名,不是保留字,您可以选择任何别名。最好只返回0作为错误或0行,非常感谢,我现在正在学习过程:)并且有没有一种方法在args中使用相同的名称?比如name=this.name(java)请注意,您已经硬编码了过滤器
WHERE from_user=1
-您是否打算使用from_user
参数?