In een for each loop gebruik ik "INSERT IGNORE INTO" om records toe te voegen.
De records worden toegevoegd in een tabel die een auto increment heeft.
Nu worden er toch dubbele rijen ingevoegd m.i. doordat de autoincrement telkens ophoogd en dus het record als een uniek record ziet. Hoe zou ik dit kunnen oplossen zodat INSERT IGNORE INTO maar 1x een record invoegd?
Door een UNIQUE INDEX te zetten op de (combinatie van) kolommen die geen dubbele waardes mogen bevatten.

Let op dat INSERT IGNORE doorgaat als er fouten gevonden worden, en niet specifiek bedoeld is om het invoeren van dubbele waardes te voorkomen.
Die snap ik niet helemaal Ger. Ik heb in die tabel geen enkele kolom die uniek hoeft te zijn behalve het id.
Doordat de for each meerdere keren dit record ophaalt wil ik hem maar 1x toevoegen in de tabel. Ik dacht dat ik hiervoor insert ignore kon gebruiken maar in combinatie met een auto increment op de tabel lijkt hij geen duplicaten te zien door de ophoging. (terwijl het wel duplicaten zijn)

Hoe bepaal je dan dat het duplicaten zijn?
INSERT ... ON DUPLICATE UPDATE misschien?
Helaas die auto increment gooit roet in het eten
Dat topic op SO gaat heel ergens anders over, nl. dat de AI waarde met één (of meer) wordt opgehoogd bij een INSERT IGNORE (of een UPSERT) query.

Maar laat eens wat code en/of de opbouw van je tabellen zien, waar komen die gegevens die je in de foreach gebruikt vandaan (want daar ontstaan de duplicates).
#$@*& Heel verhaal getypt op mn mobiel, gaat de layout van de site raar doen. @mods kunnen we nog een app of responsive layout verwachten? Grr..
Om je misschien een heel verhaal te besparen.

<?php
$sel = mysqli_query($con, "SELECT kolom1, kolom2 FROM tabel1");
while ($row = mysqli_fetch_assoc($sel)) {
	mysqli_query($con, "INSERT INTO tabel2 (kolom3, kolom4)
		VALUES('" . $row['kolom1'] . "','" . $row['kolom2'] . "')");
}
// in één query
mysqli_query($con, "INSERT INTO tabel2 (kolom3, kolom4)
		SELECT DISTINCT kolom1, kolom2 FROM tabel1");
?>

Hoi Ger
T/m regel 6 snap ik hem, maar wat doe je daarna vanaf regel 7?

Het werkt al maar ik zal het toch proberen te verduidelijken.
Ik ben bezig met de graph api van facebook. Ik krijg een response terug van alle events van een bepaalde venue. Ik wil periodiek een job draaien die deze events binnenhaalt. Nu kan het zijn dat hij soms toch dezelfde events (en venues) binnenhaalt.

Ik zet de velden in een database in mijn bestaande tabel "event" en "venue". Hierin worden ook events in weggeschreven die niet van facebook komen maar handmatig worden toegevoegd. Op deze tabellen heb ik een auto increment zitten. Daarnaast zet ik ook de event en venue-id's van facebook in dezelfde tabellen.

Ik wil dus de dubbelingen voorkomen. Als ik 10 events van dezelfde venue heb wil ik de venue uiteraard maar 1x in mijn database hebben.
Dit wil ik dus implementeren m.b.v. INSERT IGNORE INTO maar door de auto increment ziet mysql niet dat dit een dubbeling is.

Om dit te voorkomen check ik nu eerst of de facebook id's al bekend zijn in de tabellen. Zo ja dan sla ik de insert over.

Reageren