2017-10-16 16 views
0

J'ai ces données j'ai implosé.données implosées retour à des mots simples

$fruit = implode(", ",$_POST["fruit"]); 

J'ai stocké ces données dans une table mysql. Le tablerow ressemble à ceci:

ID: 1 
UserID: 5 
chosen: Apple, Banana, Orange 

je l'ai réalisé assez stupide pour stocker les données comme celui-ci et que vous voulez plutôt stockées mes données de cette façon:

ID: 1 
UserID: 5 
Fruit: Apple 

ID: 2 
UserID: 5 
Fruit: Banana 


ID: 3 
UserID: 5 
Fruit: Orange 

Le problème est que j'ai comme 100 theese disques stockés de cette façon et que vous voulez entendre si il ya un moyen avec PHP pour boucler les anciennes données et l'insérer dans une nouvelle table pour le faire ressembler à l'exemple ci-dessus, donc je ne dois pas changer manuellement tous les enregistrements?

+1

Le contraire de 'implode()' est explode() '. Utiliser ça. – Barmar

+0

Lisez chaque ligne de la table, utilisez 'explode()' pour diviser les mots, insérez les nouveaux enregistrements dans une boucle, puis supprimez l'enregistrement d'origine. – Barmar

+0

Le nombre de produits «choisis» est-il toujours le même, c'est-à-dire 3? – Moseleyi

Répondre

1

Quelque chose comme ça devrait faire l'affaire (où $mysqli est votre connexion):

if($result = $mysqli->query("SELECT * FROM `table1`")){ // select all data from the current table (where the imploded data is) 
    if($stmt = $mysqli->prepare("INSERT INTO `table2` SET `UserID`=?, `Fruit`=?")){ // prepare insertion in the new table (I'm assuming that the ID column is autoincremented) 
     while($data = $result->fetch_array()){ // get data as an array 
      $fruits = explode(', ', $data['chosen']); // explode the fruits 
      foreach($fruits as $fruit){ // loop through the fruits 
       $stmt->bind_param('is', $data['UserID'], $fruit); // bind data 
       $stmt->execute(); // insert row 
      } 
     } 
    } 
} 

Je n'ai pas testé en fait, mais vous pouvez l'essayer.

+0

@Hazelcraft jusqu'à ce jour je me demande toujours si ça a marché ou quoi, haha. J'espère que vous avez réussi à résoudre cela maintenant! – Zeke