2009-10-05 11 views
0

Ce sont les données qui se trouvent actuellement dans une colonne:données Split à plusieurs colonnes

« Titre Info - entreprise ici - Ville Ici, ST »

ST représente l'état-à-dire GA

Parfois mes données ressemble à ceci:

« Titre info - entreprise ici - Etats-Unis »

données est sur la colonne nommée « titre » et est sans les guillemets.

Comment puis-je partager avec PHP 4 nouvelles colonnes nommées:

« NEW_TITLE », « Société », « Ville », « Etat »

Le deuxième exemple où il n'y a pas de ville et Etat juste pays, ce serait bien d'aller à la colonne "ville".

Schéma de la table:

CREATE TABLE table ( 
id int(8) NOT NULL DEFAULT '0', 
Title char(100) DEFAULT NULL, 
New_Title char(100) DEFAULT NULL, 
Company char(100) DEFAULT NULL, 
City char(100) DEFAULT NULL, 
State char(100) DEFAULT NULL, 
PRIMARY KEY (id) 
) 
ENGINE=MyISAM DEFAULT CHARSET=latin1; 

Merci pour votre temps.

Ossi

Répondre

1

fendu d'abord sur "-", puis diviser le troisième élément est revenu sur ""

<?PHP 
$title = $row['title']; // or however you get the title. 
$parts = explode("-",$title); 
if (count($parts) != 3) die("Invalid title: $title"); 
$newtitle = $parts[0]; 
$company = $parts[1]; 
$location_parts = explode(',',$parts[2]); 
$city = $location_parts[0]; 
$state = $location_parts[1]; 

//now you've got $newtitle, $company, $city, and $state to do something productive with. 
+0

doux;) Est-ce que vous avez un code pratique pour moi d'insérer ces derniers aussi bien? J'ai la colonne 'id' comme clé. Si ce n'est pas correct, je me débrouille. Merci encore. – Ossi

+1

C'est un bon exercice pour vous, beaucoup de tutoriels sur l'écriture de bases de données partout :-) – timdev

+0

Cela fonctionne très bien. Comment supprimer ce souci Remarque: Offset non défini: 1 its sur cette ligne $ state = $ location_parts [1]; Cela n'arrive que lorsqu'il n'y a pas d'état. comme je l'ai dit, cela fonctionne génial sinon;) – Ossi

0

Je vois 2 façons:

d'abord: utiliser l'expression régulière comme

(^[^-]*) - ([^-]*) - ([^,]*),?(.*)$

avec preg_match

Deuxièmement: n'utilisez pas du tout le code php. Mise à jour SQL sera assez

UPDATE mytable t SET t.title = SUBSTRING_INDEX(t.value, ' - ', 1), t.company = SUBSTRING_INDEX(SUBSTRING_INDEX(t.value, ' - ', 2), ' - ', -1), t.city = SUBSTRING_INDEX(t.address, ' - ', -1);

puis

UPDATE mytable t SET 
t.city = SUBSTRING_INDEX(t.city ',', 1), 
t.state = SUBSTRING(t.city, LENGTH(SUBSTRING_INDEX(t.city, ',', 1))+3); 
Questions connexes