Goedemiddag,

Ik zit me al een aantal uurtjes gek te zoeken op iets waar ik maar niet uitkom.

Eerst en vooral heb ik twee tabellen:

Tabel Bikes
----------------
met velden ID(auto increment), fil_id, serialnr

Tabel fils
----------------
met velden ID(auto increment), postalcode, fname, address


Hetgeen ik wil doen is een lijst met een heleboel serienummers(serialnr) en hun bijbehorend filiaal(fname) rechtstreeks in de database inputten deze lijst is een .csv bestand, het importeren is geen probleem maar de juiste query om dit op een goede en nette manier te doen krijg ik niet voor elkaar.

Wat ik momenteel heb..


while(($data = fgetcsv($handle, 2000, ";")) !== FALSE)
			
						{
						//$data = str_replace("\r","\n",str_replace("\r\n","\n",$data));
						print_r ($data);
						$import = "INSERT INTO bikes(fil,serialnr)
						SELECT fils.fname, bikes.serialnr 
						FROM bikes
						INNER JOIN fils ON fils.fname = bikes.id
						SET 
						bikes.serialnr = '$data[0]', 
						bikes.fil = '$data[1]'
						WHERE (fils.fname = bikes.fil) 
						";
						
						mysql_query($import) or die (mysql_error());


Er staat nog wat code achter en na maar dat is niet van belang hier..

Het belangrijkste stukje is waar de query begint uiteraard..
De query die er nu staat werkt natuurlijk helemaal niet maar het is maar om te tonen in welke richting ik dit wil.


Alvast hartelijk bedankt om te willen helpen :)

Vriendelijke Groeten!
Hoezo sla je de naam van het filiaal ook op bij de fiets? Dat klopt niet. Het id van het filiaal opslaan is voldoende. Anders heb je redunantie.
Nee nee ik heb alle namen van de filialen in een aparte tabel staan met elk hun unieke ID.

In de tabel bikes heb ik dan telkens het id van de filialen bij elke serienr.


Maar het probleem is dat ik in die excel lijst het id van die filialen niet heb.. ik heb enkel de namen.. maar die namen staan in een aparte tabel

In de tabel bikes waar die lijst in moet staan enkel de id's van de filialen.

Dus moet ik ergen smet een inner join werken.. zoals je doet wanneer je SELECT, maar ik weet niet hoe ik dat moet implementeren bij een INSERT query..


Groetjes en bedankt alvast voor de reactie!

Oké. Door die SELECT op regel 7 dacht ik dat je dus ook die filiaalnamen wou hebben.

INSERT INTO bikes(fil_id, serialnr)
SELECT id, $data[0] FROM fils WHERE fname = $data[1]

Zoiets dus.
Hey,

ik had immers gehoopt dat het zo gemakkelijk ging zijn maar helaas..

Als ik dat gebruik in mijn while loop om die csv te importeren krijg ik dit als reactie

Array ( [0] => 215 [1] => AALST MAIL ) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MAIL' at line 2


Was al lichtjes verheugd dat het met een simpelere query dan diegene waar ik mee bezig was ging lukken..

Toch bedankt.. ik probeer nog wat verder..


Edit: Ohjah misschien helpt dit ook wel.

In de csv heb ik 2 kolommen in php $data[0] & $data[1].

De data daar ziet er uit zoals dit

Kolom 1(Serienr) Kolom 2 (Aalst Mail)
---- ----------
215 AALST MAIL
251 AALST MAIL
253 AALST MAIL
254 AALST MAIL
259 AALST MAIL
260 AALST MAIL

Nogmaals bedankt!
262 AALST MAIL
264 AALST MAIL
Misschien is het effe handig om de query te echo-en. Dan kan je zien hoe die eruit ziet en dus wat er mis gaat...






Ik verwacht dat je gewoon de query hierboven over hebt genomen zonder er verder naar te kijken en dus quotes mist. Verder vraag ik mij ook af waarom je in feite zo moeilijk doet. Als je weet dat al die fietsen bij dat filiaal horen, dan kan je dat ook hard coded doen.
Door die query te echoën heb ik het probleem gezien..

Hartelijk dank Karl!

Bij deze is het opgelost!
Ben nu ook wel benieuwd wat het probleem was.
Jah gewoon stoms he.. mijn variable niet tussen quotes gezet.. dus hij nam daar waar er spaties in de data zat naam hij die apart..

Dus oplossing = dit..


while(($data = fgetcsv($handle, 2000, ";")) !== FALSE)
			
						{
						//$data = str_replace("\r","\n",str_replace("\r\n","\n",$data));
						$import = "INSERT INTO bikes(fil, serialnr)
						SELECT id, $data[0] FROM fils WHERE fils.fname = '$data[1]'";
						
						//$import = "INSERT into bikes(fil,serialnr) values ('$data[1]','$data[0]')";	
						mysql_query($import) or die (mysql_error());
						}


Nogmaals bedankt!

Reageren