ایس کیو ایل اسٹرنگ کو ایک سے زیادہ قطاروں میں تقسیم کرتا ہے

Mysql Split String Into Multiple Rows



Der Sku des Produkts sollte unabhängig und einzigartig sein.

Zum Beispiel ist der Sku der Kette L001, L002, L003 und der Anhänger ist D001, D002, D003.



Aus historischen Gründen werden einige Produkte jedoch in Kombination verkauft, und ihr Artikel ist eine Kombination aus anderen Artikeln.



Zum Beispiel Kette + Anhänger: L001 + D002,



Beim Zählen ist es jedoch erforderlich, die Reihenfolge entsprechend der unabhängigen SKU in die Tabelle zu unterteilen.

Zum Beispiel ist der Sku einer BestellungL001 + D002 muss in 2 Zeilen aufgeteilt werden, der Sku jeder Zeile ist L001 bzw. D002

Erstellen wir zunächst eine gespeicherte Prozedur in MySQL, um einen Datensatz eines kombinierten Produkts in zwei Teile aufzuteilen und in die Datenbank einzufügen:



DELIMITER $$ USE `aporroreport`$$ DROP PROCEDURE IF EXISTS `sku_split_insert_order`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `sku_split_insert_order`(sku VARCHAR(255), orderid INT) BEGIN DECLARE sku_num INT #The Sku actually contains multiple skus, separated by +, here only the number of + is calculated DECLARE sku_i INT #temporary variable DECLARE tmp_sku VARCHAR(255) #Sku temporarily split DELETE FROM `sku_orders_products_list` #First empty the table #Originally correct sku_num should be +1, but here because the subscript starts from 1, so +2 SET sku_num = LENGTH(sku) - LENGTH(REPLACE(sku,'+',''))+2 SET sku_i = 1 WHILE sku_i Ausführen

CALL sku_split_insert_order ('L001 + D002', 888)

Ergebnis:


Die endgültige gespeicherte Prozedur:

DELIMITER $$ USE `aporroreport`$$ DROP PROCEDURE IF EXISTS `test_copy_order`$$ CREATE PROCEDURE `test_copy_order`() BEGIN #Transfer the data of one order table to another table, because the sku in it is actually added by multiple skus, and now it needs to be split #That is: 2 sku combinations are split into 2 lines, and 3 sku combinations are split into 3 lines #--Define the variable that receives the cursor data DECLARE sku VARCHAR(200) #temporary sku DECLARE sku_num INT #The Sku actually contains multiple skus, separated by +, here is the number of independent skus DECLARE sku_i INT #temporary variable DECLARE tmp_sku VARCHAR(255) #Sku temporarily split DECLARE orderid INT #-- Cursor #-- Traverse data end flag DECLARE done INT DEFAULT FALSE #Add alias when querying, otherwise no data can be found DECLARE cur CURSOR FOR SELECT t.sku, t.orderid FROM `aporro_orders_products_list` AS t #-- Bind the end flag to the cursor DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE #-- Open the cursor OPEN cur #-- start loop read_loop:LOOP #-- Extract the data in the cursor FETCH cur INTO sku,orderid #-- At the end of the statement IF done THEN LEAVE read_loop END IF #Count the number of independent skus. The correct sku_num should be +1, but because the subscript of SUBSTRING_INDEX starts from 1, so +2 SET sku_num = LENGTH(sku) - LENGTH(REPLACE(sku,'+',''))+2 SET sku_i = 1 WHILE sku_i