Insert into __ select..
Ik ga ergens de fout in maar zie niet direct waar..
Als iemand een hint/duw kan geven richting de goede manier dan ben ik een tevreden mens :).
foutmelding:
Code (php)
1
INSERT INTO clients(username, password, fil, phone, email) SELECT '1', '2', id FROM fils WHERE fils.postalcode = '3', '4', '5'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 ' '4', '5'' at line 2
--> Ik heb een aantal dingen weggedaan met nr's omdat er gevoelige info in staat.
Mijn stukje code dat dit zou moeten doen:
Code (php)
1
2
2
$import = "INSERT INTO clients(username, password, fil_id, phone, email)
SELECT '$data[3]', '$data[4]', id FROM fils WHERE fils.postalcode = '$data[0]', '$data[1]', '$data[2]'";
SELECT '$data[3]', '$data[4]', id FROM fils WHERE fils.postalcode = '$data[0]', '$data[1]', '$data[2]'";
Gegevens worden uit een .csv bestand geladen..
Kolom 1 uit de csv = postcode's
Kolom 2 uit de csv = telnr's
Kolom 3 uit de csv = emails
Kolom 4 uit de csv = usernamen
Kolom 5 uit de csv = paswoorden
Het gaat fout ergens om dat ik reeds een table heb in mysql waar alle postcodes in staan met elk hun uniek ID, en dat uniek ID wil ik in deze tabel krijgen..
Waarschijnlijk doe ik iets stoms ergens maar ik zie het niet direct..
Als iemand kan/wil helpen -> zeer geapprecieerd.
Vriendelijke Groeten!
Gewijzigd op 20/11/2010 14:50:20 door Elio vp
Leer sql: sql where.
Code (php)
1
2
2
$import = "INSERT INTO clients(username, password, fil_id, phone, email)
SELECT '$data[3]', '$data[4]', 'id FROM fils WHERE fils.postalcode = $data[0]', '$data[1]', '$data[2]'";
SELECT '$data[3]', '$data[4]', 'id FROM fils WHERE fils.postalcode = $data[0]', '$data[1]', '$data[2]'";
Dit werkt gedeeltelijk, juist het feit dat hij de id's niet uit de fils tabel haalt maar er gewoon 0 input..
dus het deeltje "id FROM fils WHERE fils.postalcode = $data[0]" doet het niet..
Simpel gezegd is dit toch "Het ID van de tabel fils waar fils.postcode data0 is..
Dus in principe zou het moeten werken maar doet hij niet.. mmmmm
Alvast wederom bedankt voor je snelle reactie Karl :-)
Groeten!
Heb je al opgezocht hoe je precies een where doet?
Maar in een insert lukt het me niet.. men verstand reikt zo ver niet denk ik..
Die quote die er staat was maar ff om te testen en te zien wat dat exact deed.. (niet veel dus :p)
Dank voor de reactie wederom :)
Elio vp op 20/11/2010 16:40:57:
Jah hoor dat heb ik gedaan, wist ik eerder ook al, in een select query kan ik bijna alle mogelijke combinaties uitvoeren..
(...)
(...)
Daar lijkt het niet op. Voer alleen maar eens die SELECT query uit.
als ik bijvoorbeeld gewoon
SELECT fils.id FROM fils WHERE fils.postalcode = 9000
Dan krijg ik netjes het kantoor ID terug..
Dus die werkt perfect
Want dat is ook een hele andere query dan de select query die je in je insert hebt.
Als je daar ff mee kan helpen.. :-)
Hartelijk dank! en nogmaals bedankt voor jou reacties!!
Waarom verschilt dan die select query van jou zoveel?
Kijk ook naar de where...
Die where kan sowieso nooit of te nimmer.
En dat ligt niet aan de insert, die geeft ook geen fout.
Mysql zegt toch dat de fout bij de where ligt.
Maar nadien gaf hij geen fout meer aan, maar hij voerde de where clausule niet uit..
Hij inputte gewoon telkens 0 in mijn fils_id kolom..
Als ik die select query uitvoer in phpmyadmin dan krijg ik netjes het result..
Het probleem ligt hem gewoon in de complete query, de insert & de select samen in 1 query krijg ik niet goed..
Ik ga nog wat verder knutselen..
Wederom bedankt!
Als de query niet goed gaat, tijdens development gewoon echoën. Dan kan je zien wat er niet goed gaat.
dit is dus het stukje code uit het script.
Code (php)
1
2
2
$import = "INSERT INTO clients(username, password, fil, phone, email)
SELECT '$data[3]', '$data[4]', (fils.id FROM fils WHERE fils.postalcode = $data[0]), '$data[1]', '$data[2]'";
SELECT '$data[3]', '$data[4]', (fils.id FROM fils WHERE fils.postalcode = $data[0]), '$data[1]', '$data[2]'";
Hier importeert hij netjes de username, password, phone & email.
Bij die fil krijg ik telkens een 0 waarde in mijn velden in mysql.
Dit krijg ik als ik echo..
Code (php)
1
INSERT INTO clients(username, password, fil, phone, email) SELECT 'user', 'pass', [b]'fils.id FROM fils WHERE fils.postalcode = 1020'[/b], 'telnr', 'email'
het gedeelte "fils.id FROM....= 1020", daar gaat het dus mis.. ik weet alleen niet hoe het op te lossen..
Dank!
Gewijzigd op 20/11/2010 21:19:20 door Elio vp
Je doet er nu alleen een INSERT boven omdat je dingen in een tabel wilt hebben. En toevallig heb je andere dingen al in een andere tabel zitten.
Zoals ik al zei, deze SELECT query is heeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeel anders dan die je hierboven plaatst (en waarvan je zei dat het dezelfde is.
Voer maar eens uit in phpmyadmin o.i.d.:
SELECT 'user', 'pass', 'fils.id FROM fils WHERE fils.postalcode = 1020', 'telnr', 'email'
En kijk er naar.
Dat klopt toch voor geen ene iota...
:)
(Je moet daar niet boos om worden..)
Groeten en nogmaals bedankt voor de wederom snelle reactie :)
Ga eerst zorgen dat je een normaal werkende SELECT query hebt voordat je die ene regel (INSERT INTO blaat(blabla, blup, blap)) d'r boven zet.
That's all.
Die werkt perfect.. is exact hetgene ik nodig heb..
Hoe stom het ook klinkt.. ik krijg het niet voor elkaar om die twee "INSERT & SELECT" samen te voegen tot 1 goede query..
Verder heb ik hier queries gemaakt zoals deze
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT DISTINCT interventions.id, bikes.serialnr, statuses.status, FROM_UNIXTIME(UNIX_TIMESTAMP(interventionshistory.date)) AS datum
FROM interventions
INNER JOIN interventionshistory ON interventions.id = interventionshistory.intervention
INNER JOIN bikes ON interventions.bike = bikes.id
INNER JOIN statuses ON interventions.status = statuses.id
INNER JOIN fils ON interventions.fil = fils.id
WHERE fils.id = '38'
ORDER BY 'interventions.id'
FROM interventions
INNER JOIN interventionshistory ON interventions.id = interventionshistory.intervention
INNER JOIN bikes ON interventions.bike = bikes.id
INNER JOIN statuses ON interventions.status = statuses.id
INNER JOIN fils ON interventions.fil = fils.id
WHERE fils.id = '38'
ORDER BY 'interventions.id'
En die doen het allemaal perfect(in feite doet dit er niet toe maar ik wil maar gewoon ff tonen dat dat me wel perfect lukt), al mijn SELECT queries..
maar ik zeg het.. ik krijg het niet goed om die 2 dingen samen te krijgen, en wss is het niet al te moeilijk..
Elio vp op 20/11/2010 21:36:57:
En kijk nu eens naar wat je genereert.
Hij gaat daar gewoon over zonder er iets mee te doen..
Daarom net dat ik er zo mee in de knoop lig.. "Hoe moet ik dit doen zodat hij alle andere data die hij rechtstreeks uit die csv haalt direct input, maar juist dat ene veldje waar hij moet kijken naar het ID(fils.id) uit een andere table(fils), dus dat SELECT gedeelte.."
Goh en waarschijnlijk gaat dit zo belachelijk simpel zijn dat ik mij der een paar dagen slecht van ga voelen.. :(
Of zie je niet dat het geen normale / goede / correcte SELECT query is?
SELECT 1,2,3, 'blaat', 'blup' -- Levert 1,2,3,blaat,blup
SELECT 1,2,3, 'blaat', 'blup', id FROM users -- Levert 1,2,3,blaat,blup,id-van-één-user
dat die daar waarschijnlijk ook niet horen.
Maar ik weet gewoon niet hoe ik ze er anders in moet krijgen..
En op deze manier zal het ook niet werken..
INSERT INTO clients(username, password, fil, phone, email) VALUES ($data[3]', '$data[4]', fils.id FROM fils WHERE fils.postalcode = $data[0], '$data[1]', '$data[2]');
Daarom, nogmaals, ik heb geen idee hoe ik het voor elkaar moet krijgen Karl.. :(
Jah dat is het hem net.. ik weet dat die SELECT query niet klopt.. en dat in dat SELECT gedeelte die variablen die voor fils.id komen dat die daar niet horen en die variablen na dat stukje -> Maar ik weet gewoon niet hoe ik ze er anders in moet krijgen..
En op deze manier zal het ook niet werken..
INSERT INTO clients(username, password, fil, phone, email) VALUES ($data[3]', '$data[4]', fils.id FROM fils WHERE fils.postalcode = $data[0], '$data[1]', '$data[2]');
Daarom, nogmaals, ik heb geen idee hoe ik het voor elkaar moet krijgen Karl.. :(