mysql-recursieve-stored-function

Gesponsorde koppelingen

PHP script bestanden

  1. mysql-recursieve-stored-function

« Lees de omschrijving en reacties

De tabel:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
CREATE TABLE  categories (
  `categoryid` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(100) NOT NULL,
  `parentid` int(10) unsigned default NULL,
  PRIMARY KEY  (`categoryid`),
  KEY `FK_categories_1` (`parentid`),
  CONSTRAINT `FK_categories_1` FOREIGN KEY (`parentid`) REFERENCES `categories` (`categoryid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


De stored function:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
DELIMITER $$

DROP FUNCTION IF EXISTS catname $$
CREATE FUNCTION catname(arg_categoryid INT) RETURNS varchar(100) CHARSET utf8
BEGIN
  DECLARE currentCategoryId INT;
  DECLARE categoryname VARCHAR(100);
  DECLARE padder VARCHAR(20) DEFAULT '';

  SET currentCategoryId = arg_categoryid;
  SELECT name INTO categoryname FROM categories WHERE categoryid = arg_categoryid;

  catloop : LOOP
    SELECT parentid INTO currentCategoryid FROM categories WHERE categoryid = currentCategoryId;

    IF currentCategoryId IS NULL THEN LEAVE catloop; END IF;

    SET padder = CONCAT(padder,'-');
  END LOOP catloop;


  RETURN CONCAT(padder,' ',categoryname);
END $$

DELIMITER ;


Voorbeeld data
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
INSERT INTO `categories` (`categoryid`, `name`, `parentid`) VALUES (3, 'level 1 - test', NULL),
(4, 'level 1 - test 2', NULL),
(5, 'level 1 - test 3', NULL),
(6, 'level 2 - test', 4),
(7, 'level 2 - test', 4),
(8, 'level 3 - test', 6),
(9, 'level 3 - test 2', 6);

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.