在MySQL中创建一个函数的例子

63 阅读1分钟

下面的例子是一个非常简单的MySQL函数,旨在给你提供想法,如果你想把它带到下一个步骤。

CREATE TABLE `activity` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ip` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `timestamp` datetime NOT NULL,
  `url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_activity_1_idx` (`user_id`),
  CONSTRAINT `fk_activity_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO activity
(ip, timestamp, url, user_id)
VALUES
('1.1.1.1', '2015-04-01 18:10:59', '/url_one', 1),
('1.1.1.1', '2015-04-02 10:06:11', '/url_two', 1),
('2.2.2.2', '2015-04-01 21:00:00', '/url_one', 2),
('2.2.2.2', '2015-04-03 23:01:40', '/url_one', 2),
('3.3.3.3', '2015-04-02 02:23:30', '/url_one', 3),
('4.4.4.4', '2015-04-01 03:00:14', '/url_two', 4),
('5.5.5.5', '2015-04-01 13:30:33', '/url_one', 5);

mysql> SELECT * FROM activity;
+----+---------+---------------------+----------+---------+
| id | ip      | timestamp           | url      | user_id |
+----+---------+---------------------+----------+---------+
|  1 | 1.1.1.1 | 2015-04-01 18:10:59 | /url_one |       1 |
|  2 | 1.1.1.1 | 2015-04-02 10:06:11 | /url_two |       1 |
|  3 | 2.2.2.2 | 2015-04-01 21:00:00 | /url_one |       2 |
|  4 | 2.2.2.2 | 2015-04-03 23:01:40 | /url_one |       2 |
|  5 | 3.3.3.3 | 2015-04-02 02:23:30 | /url_one |       3 |
|  6 | 4.4.4.4 | 2015-04-01 03:00:14 | /url_two |       4 |
|  7 | 5.5.5.5 | 2015-04-01 13:30:33 | /url_one |       5 |
+----+---------+---------------------+----------+---------+
7 rows in set (0.00 sec)

下面的函数将为给定的ip ,返回相应的url :

DROP FUNCTION IF EXISTS get_latest_ip_visit;

DELIMITER $$

CREATE FUNCTION get_latest_ip_visit (IN_ip VARCHAR(15))
RETURNS VARCHAR(250)
BEGIN
    DECLARE OUT_url VARCHAR(250);
    
    SELECT url INTO OUT_url
    FROM activity
    WHERE `ip` = IN_ip
    ORDER BY `timestamp` DESC
    LIMIT 1;
    
    RETURN OUT_url;
END$$

DELIMITER ;
mysql> SELECT get_latest_ip_visit('1.1.1.1') AS Url;
+----------+
| Url      |
+----------+
| /url_two |
+----------+
1 row in set (0.00 sec)