Adesea în mysql se foloseşte relaţia 1 la mai multe sau relaţia mai multe la 1. De regulă construcţia acestor relaţii este formată prin separarea cheilor străine prin virgulă.
Aşadar am creat o funcţie mysql care adaugă o cheie în câmpul ce reţine cheile străine. Funcţia a fost creeată în scopul uşurării muncii.
Să luăm un exemplu în php: presupunem că avem o bază de date ce conţine două tabele, utilizatori respectiv grupuri. Mai mulţi utilizatori vor aparţine unui grup, astfel vom creea relaţia mai mulţi la 1. Tabela grupuri va conţine câmpurile: ID_grup , nume_grup şi id_utilizatori. Tabela utilizatori va conţine câmpurile: ID_utilizator şi nume. În câmpul id_utilizatori din tabela grupuri se vor reţine cheile utilizatorilor care aparţin unui grup separat prin virgulă.
Pentru manipularea datelor sa considerăm o aplicaţie scrisă in limbajul de programare php. Atunci când se pune problema adăugării unui utilizator la un grup, în aplicaţie va trebui sa facem o comandă de SELECT către serverul mysql care va returna un şir de caractere cu lista cheilor dintr-un grup. Pentru adăugarea cheii utilizatorului la campul selectat va trebui sa transformăm şirul de caractere într-un vector de tip array. La acest vector va trebui adaugatacheia utilizatorului. După adăugarea cheii se va transforma din nou într-un şir de caractere şi inserat in baza de date la câmpul menționat mai sus.
Funcția ADD_KEY() construită în mysql elimină operațiunile amintite la paragrafele anterioare. Parametrii tranzmişi acestei funcţii fiind câmpul unde se va introduce cheia şi cheia care dorim să fie introdusă. Luând exemplul de mai sus vom construi o comandă sql utilizând această funcție:
UPDATE grupuir SET id_persoane=ADD_KEY(id_persoane,25) WHERE ID_grup=1
În continuare am să va prezint construcţia funcţiei:
DELIMITER $$
CREATE FUNCTION `ADD_KEY` (lista TEXT,cheie INT(11))
RETURNS TEXT CHARSET utf8
BEGIN
IF(lista='') THEN
SET lista = cheie;
ELSE
SET lista = CONCAT(lista,',',cheie);
END IF;
RETURN lista;
END $$
DELIMITER ;
Comentarii recente