import van grote hoeveelheid data

Status
Niet open voor verdere reacties.

Trixx

Nieuwe gebruiker
Lid geworden
10 mrt 2009
Berichten
2
Ik heb 3 tabellen in mijn database:
categories:
-id
-name

products:
-id
-categories_id
-name

prod_details:
-id
-products_id
-size
-price

Ik heb dus een 15-tal categorien, een 4000-tal producten en per product ongeveer 5 groottes met bijhorende prijs wat maakt dat de laatste tabel ongeveer 20000 records heeft.

Om de zoveel tijd wordt via een formulier een excel file geupload met aangepaste prijzen van deze producten en/of met nieuwe producten. Ik moet dus alle records doorlopen, kijken of het product aanwezig is, indien ja dan moet ik de prijs updaten en indien neen dan moet ik het toevoegen. Hieronder vind je de query die ik heb gebruikt. Als ik die 20000 records moet doorlopen duurt dat echter heel lang. Wie kan me helpen om dit efficienter te laten verlopen?
Alvast enorm bedankt!!

for($i = 1; $i <= $aantalrecords; $i++){
$sql = mysql_query("SELECT d.id
FROM prod_details AS d
LEFT JOIN products AS p ON p.id = d.products_id
LEFT JOIN categories AS c ON c.id = p.categories_id
WHERE d.size = $size[$i]
AND p.name = $pname[$i]
AND c.name = $cname[$i]);
if(mysql_num_rows($sql) == 0){
//hier de code voor de INSERT
}
else
//hier de code voor de UPDATE
}
 
Even er van uitgaande dat het geuploade formulier alle gewijzigde data bevat, zou je gebruik kunnen maken van het REPLACE INTO statement; die update automatisch het oude veld, als dat al bestaat, met het nieuwe veld.

Alternatief kun je misschien beter de hele database tabel naar PHP trekken ipv een heleboel queries doen of een index toevoegen op de naam velden (of nog beter: je upload formulier de IDs mee laten sturen, daar kun je veel sneller op zoeken)

Heb je hier wat aan?
 
Even er van uitgaande dat het geuploade formulier alle gewijzigde data bevat, zou je gebruik kunnen maken van het REPLACE INTO statement; die update automatisch het oude veld, als dat al bestaat, met het nieuwe veld.

Alternatief kun je misschien beter de hele database tabel naar PHP trekken ipv een heleboel queries doen of een index toevoegen op de naam velden (of nog beter: je upload formulier de IDs mee laten sturen, daar kun je veel sneller op zoeken)

Heb je hier wat aan?

bedankt voor je reactie! id's geven aan de velden in het formulier zou ideaal zijn maar is helaas geen optie. De excel file heeft gewoon 4 kolommen: categorie, product, size en price. Zo ongeveer 20000 records onder elkaar.
Kan je eventueel eens aan de hand van bovenstaande query een REPLACE INTO query maken?
Bedankt
 
Ik zie zo echt niks... kun je de Excel sheet editen? Als het mogelijk is om daar de primary IDs toe te voegen voor de producten en die mee te sturen, dan gaat het wel lukken denk ik...

Anders vrees ik toch dat je een beetje aan brute-forcing vast zit, zoals je het nu doet...

Of ik ga echt meer informatie nodig hebben :(
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan