10
votes

MySQL, diviser une chaîne et insérer dans la table

J'ai deux entrées pour ma procédure stockée. L'un est le «RoleDid» et la deuxième est le «Menuids». Les «menusids» sont une liste des identifiants de menus séparés par des virgules devant être insérés avec RoleDid. Rolid est juste une INT et nous devons mettre ce roledid contre chaque menuid. My Table 'Rolesmenus' contient deux colonnes une pour menuID et une pour leur rôle motivé.

Maintenant, j'ai besoin de diviser les Menuids et d'insérer chaque menuID avec pilotage.

Comment puis-je écrire une procédure stockée pour cela?


0 commentaires

5 Réponses :


-2
votes

AFAIK MYSQL fait pas avoir une fonction pour diviser les chaînes. Voici le manuel MySQL pour les fonctions liées à la chaîne. Dans la section Commentaires devraient être des informations sur les solutions de contournement de la chaîne de division avec des fonctions de sous-chaînes mais pas vraiment utilisables: manuel MySQL


0 commentaires

5
votes

Donnez-le. Il peut avoir besoin de quelque réslefing si la chaîne de Menuids ne correspond pas à "Menuid, Menuid, MenuID".

Je ne sais pas ce que les données sont saisies la colonne MENUID dans votre table cible (int?) Vous devez donc avoir à mettre Une vérification numérique elle-même (au cas où '1,2,3, banane, 4,5' est transmise en tant que paramètre d'entrée Menuids). P>

DELIMITER $$

DROP PROCEDURE IF EXISTS `insert_role_menuids`$$

CREATE PROCEDURE `insert_role_menuids`(IN RoleID INT,IN MenuIDs varchar(500))
BEGIN
declare idx,prev_idx int;
declare v_id varchar(10);

set idx := locate(',',MenuIDs,1);
set prev_idx := 1;

WHILE idx > 0 DO
 set v_id := substr(MenuIDs,prev_idx,idx-prev_idx);
 insert into RolesMenus (RoleId,MenuId) values (RoleID,v_id);
 set prev_idx := idx+1;
 set idx := locate(',',MenuIDs,prev_idx);
END WHILE;

set v_id := substr(MenuIDs,prev_idx);
insert into RolesMenus (RoleId,MenuId) values (RoleID,v_id);

END$$
DELIMITER ;


1 commentaires

Excellente procédure pour convertir une chaîne séparée par ',' à table!



19
votes

Vous pouvez créer une requête d'insertion (car l'instruction permet d'insérer plusieurs enregistrements) et de l'exécuter avec déclarations préparées , par exemple - xxx

Comme vous le voyez, cela peut être fait sans procédure stockée.


0 commentaires

0
votes

Pour cette solution, vous devez créer une table avec le nom Splitd_Table, il peut avoir un identifiant (Autooincrerement) si vous en avez besoin et doit avoir une colonne où stocker la valeur (je l'appelle la valeur de la valeur) xxx < / pré>


0 commentaires

0
votes

première création de procédure xxx


appelez xxx


0 commentaires