Insert into met een inner join..
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..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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());
{
//$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!
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!
INSERT INTO bikes(fil_id, serialnr)
SELECT id, $data[0] FROM fils WHERE fname = $data[1]
Zoiets dus.
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
Code (php)
1
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
Gewijzigd op 18/11/2010 14:56:55 door Elio vp
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.
Hartelijk dank Karl!
Bij deze is het opgelost!
Ben nu ook wel benieuwd wat het probleem was.
Dus oplossing = dit..
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
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());
}
{
//$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!