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;

我在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;

    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
    参数?