Извлечение XML-данных в MySQL

Провел бесчисленные часы, пытаясь понять это безрезультатно. Я получаю целую загрузку XML-файлов и в идеале искал способ импорта транзакции прямо в базу данных, поэтому мне не нужно делать это вручную.

Мне удалось получить результаты ниже, но не могу понять, как взорвать продукты и назначить их индивидуальной транзакцией клиенту, используя те же оставшиеся детали.

Это то, что я пробовал и управлял до сих пор:

////Daily XML I get sent in this format <trans> <custtrans> <cust>564</cust> <cust_name>John David</cust_name> <product>P1,P2,P3,P4</product> <internal>Yes</internal> </custtrans> <custtrans> <cust>877</cust> <cust_name>James Harris</cust_name> <product>P2</product> <internal>No</internal> </custtrans> </trans> ////I'd Like the transactions to be recorded in mysql like this cust |cust_name |product |internal 564 |John David |P1 |Yes 564 |John David |P2 |Yes 564 |John David |P3 |Yes 564 |John David |P4 |Yes 877 |James Harris |P2 |No ////This is how it is being inserted which I do NOT WANT cust |cust_name |product |internal 564 |John David |P1,P2,P3,P4|Yes 877 |James Harris |P2 |No ////my PHP insert statement into database $db = new PDO($dsn, $username, $password, $options); $xml = simplexml_load_file('http://xml.com'); foreach ($xml as $insert) { try { $stmt = $db->prepare('INSERT INTO customers (cust,cust_name,product,internal) VALUES (:cust,:cust_name,:product,:internal)'); $stmt->execute(array( ':cust' => $insert ->cust, ':cust_name' => $insert ->cust_name, ':product' => $insert ->product, ':internal' => $insert ->internal, )); //else catch the exception and show the error. } catch(PDOException $e) { $error[] = $e->getMessage(); } } 

Вы можете повернуть строку, содержащую продукты, разделенные запятой, на массив продуктов, например, используя функцию explode () в PHP.

Затем просто зациклируйте все продукты в массиве, вставив каждый отдельный продукт.

Пример:

 foreach ($xml as $insert) { $productNamesSeparatedWithCommas = "P1,P2,P3,P4"; $productNamesArray = explode(",", $productNamesSeparatedWithCommas); foreach ($productNamesArray as $singleProduct) { try { $stmt = $db->prepare('INSERT INTO customers (cust,cust_name,product,internal) VALUES (:cust,:cust_name,:product,:internal)'); $stmt->execute(array( ':cust' => $insert ->cust, ':cust_name' => $insert ->cust_name, ':product' => $singleProduct, ':internal' => $insert ->internal, )); //else catch the exception and show the error. } catch(PDOException $e) { $error[] = $e->getMessage(); } } }