login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Meerdere SQL statements in 1 query?

Offline foxie - 22/05/2005 17:18
Avatar van foxieNieuw lid Ik zou bij de installatie van mijn project een 1500 tal landen en plaatsen standaard in mijn systeem willen inladen, ze moeten dus in 2 tabellen komen te staan, tblPlaats en tblLand.

Nu is het probleem dat ik niet weet hoe je met 1 query die 1500 records kan toevoegen als ik de tabel exporteer in phpmyadmin en dat dan gebruik (dan krijg ik 1500 keer onder elkaar insert into... dan gaat dit niet.

Is er een mogelijke manier om toch nog die 1500 landen / plaatsen te inserten in de code en dt zonder 1500 verschillende query's te moeten maken en te moeten uitvoeren?

14 antwoorden

Gesponsorde links
Offline Fenrir - 22/05/2005 17:27 (laatste wijziging 22/05/2005 17:28)
Avatar van Fenrir PHP expert Dat kan: gewoon achter iedere query een ; zetten, en dan de volgende erachter. Eigenlijk net als php-statements.
Offline Frederic - 22/05/2005 17:33
Avatar van Frederic PHP ver gevorderde oftewel joins gebruiken, indien er tenminste een relatie bestaat tussen de tabellen.
Offline foxie - 22/05/2005 17:41
Avatar van foxie Nieuw lid ik doe het nu zo en dit geeft fouten:

  1. $qryLandenToevoegen="INSERT INTO `tblland` VALUES (1, 'België', 32);
  2. INSERT INTO `tblland` VALUES (2, 'NEDERLAND', 31);
  3. INSERT INTO `tblland` VALUES (3, 'GREECE', 30);
  4. INSERT INTO `tblland` VALUES (4, 'USA', 1);
  5. .........
  6. INSERT INTO `tblland` VALUES (102, 'België', 32);
  7. INSERT INTO `tblland` VALUES (103, 'AUSTRALIE', 0);
  8. INSERT INTO `tblland` VALUES (104, 'AUSTRALIA', 61);
  9. INSERT INTO `tblland` VALUES (105, 'IRAN', 98);
  10. INSERT INTO `tblland` VALUES (106, 'IRAN', 98);
  11. INSERT INTO `tblland` VALUES (107, 'testland <hr>', 10);
  12. INSERT INTO `tblland` VALUES (108, 'BELGIE', 32)";
  13. $resLandenToe=mysql_query($qryLandenToevoegen) or die (mysql_error());


de fout zit em dus op de ; aan het einde van de statement telkens , weet iemand raad?
Offline simontjeuh - 22/05/2005 17:52
Avatar van simontjeuh HTML interesse probeer eens "; ( " voor de ; )
en telkens voor INSERT dan weer " openen.
Offline MechaVore - 22/05/2005 17:53 (laatste wijziging 22/05/2005 18:00)
Avatar van MechaVore Gouden medaille

PHP gevorderde
klopt je query wel ?
volgens Sitemasters moet het zo:
INSERT INTO tabelnaam (kolom1, kolom2) VALUES ('waarde1', 'waarde2')

dus eigenlijk moet je het nog in kollommen setten toch ???

[edit]
ik zal het wel fout hebben, maar je moet toch iets in een kolom zetten ?

bijv:
insert into leden ('naam', 'land', 'nogwat') VALUES ('jan', 'holland', 'nogwat');
Offline foxie - 22/05/2005 17:57
Avatar van foxie Nieuw lid dat begrijp ik niet, kan je me dat wat beter uitleggen mss?
Offline foxie - 22/05/2005 17:59
Avatar van foxie Nieuw lid ja dat heb ik ook al gezien, maar deze heb ik letterlijk gekopieerd van phpmyadmin, (export functie, zou dat dan eventueel mss de fout zijn 
Offline Disa - 22/05/2005 18:05
Avatar van Disa PHP interesse opslaan naar een file.
Dan op je host een php scriptje maken dat via een while loop telkens een regel leest die query't en dan opnieuw begint maar een regel lager.

Dunno of dit gaat hoor

- Disa
Offline foxie - 22/05/2005 18:07
Avatar van foxie Nieuw lid @Disa, dar heb ik ook al aangedacht, maar hoe moet je dit dan precies doen, heb nog nooit met bestanden gewerkt in php:s
Offline Legolas - 22/05/2005 18:44
Avatar van Legolas Onbekend fopen...
fwrite...
zie php.net of de tutorial hier!
Offline foxie - 22/05/2005 18:50
Avatar van foxie Nieuw lid Ik heb het opgelost,

Ik heb het hele mysql gebeuren naar een .txt getransformeerd en alle commentaar verwijderd, en dan een scriptje gemaakt dat elke regel uit het tekstbestand leest en in een array steekt. het was simpelder dan ik dacht, maar toch bedankt aan iedereen die antwoordde!

Dit is het scriptje:

  1. //Bestand landenPlaatsen.txt exclusief openen om te lezen
  2. $bestand=fopen ("landenPlaatsen.txt","r");
  3. //Met file elke regel in het bestand in de array $regel plaatsen
  4. $regel=file("landenPlaatsen.txt");
  5. //dmv een for loop elke plaats in de array aflopen (arraygroote=sizeof($regel)
  6. for($t=0;$t<sizeof($regel);$t++){
  7. mysql_query($regel[$t]) or die("Kan regel ".$t." niet uit het bestand lezen");
  8. }
  9. //Bestand vrijgeven
  10. fclose($bestand);
Offline Thomas - 22/05/2005 19:04 (laatste wijziging 22/05/2005 19:05)
Avatar van Thomas Moderator Het "probleem" zit hem in het feit dat mysql_query() maar één query als (tekst-)parameter accepteert. Je kunt dus niet meerdere queries in één string proppen en deze dan in één keer uitvoeren met één mysql_query() statement.

Wat je volgens mij wèl kunt doen, is het volgende:

  1. $query = "INSERT INTO `tblland` VALUES (1, 'België', 32),
  2. (2, 'Nederland', 31),
  3. (3, 'Greece', 30),
  4. ...,
  5. (106, 'Iran', 98)";


Dat is namelijk "één INSERT-statement" die meerdere kolommen tegelijkertijd invoert.
Offline Legolas - 22/05/2005 19:08
Avatar van Legolas Onbekend @FangorN:
Ja inderdaad, maar als je dan een quote-fout hebt gemaakt, is het wel een halfuur zoeken, omdat hij gewoon bij $query een fout geeft.
Dan kun je toch beter die methode van hem zelf doen, omdat hij dan een meer gedetailleerde fout geeft.
Offline Thomas - 23/05/2005 10:57
Avatar van Thomas Moderator @Legolas:
dat snap ik ook, maar het werd gevraagd (meerdere inserts in één query).
Vroeger of later zul je het waarschijnlijk wel leren dat het gewoon antwoord geven op de vraag efficiënter is/werkt dan iemand proberen uit te leggen hoe het beter kan. Dat (hoe iets beter kan) werd namelijk niet gevraagd... De vragensteller heeft in veel gevallen ook niets aan dit "antwoord".
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.192s