Insert into met een inner join..

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Elio vp

Elio vp

18/11/2010 13:24:26
Quote Anchor link
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..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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());


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!
 
PHP hulp

PHP hulp

22/11/2024 06:59:01
 

18/11/2010 14:15:39
Quote Anchor link
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.
 
Elio vp

Elio vp

18/11/2010 14:28:37
Quote Anchor link
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!
 

18/11/2010 14:43:18
Quote Anchor link
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.
 
Elio vp

Elio vp

18/11/2010 14:54:02
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 

18/11/2010 15:02:57
Quote Anchor link
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.
 
Elio vp

Elio vp

18/11/2010 15:07:27
Quote Anchor link
Door die query te echoën heb ik het probleem gezien..

Hartelijk dank Karl!

Bij deze is het opgelost!
 

18/11/2010 15:25:36
Quote Anchor link
Ben nu ook wel benieuwd wat het probleem was.
 
Elio vp

Elio vp

18/11/2010 15:27:49
Quote Anchor link
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..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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());
                        }


Nogmaals bedankt!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.