if statement van resultaten for-loops

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niels Mensink

Niels Mensink

03/03/2015 14:06:18
Quote Anchor link
Hoi,

Wat ik probeer te doen is informatie van de ene naar de andere database over te zetten. Hierbij wil ik een check doen op basis van het emailadres. Indien email hetzelfde is wil ik de rij updaten, anders een nieuwe toevoegen.

Ik gebruik hiervoor twee for-loops en een if statement:

for-loop{
$var = 3 emails
for-loop{
$var2 = 6 emails
if ($var === $var2) {

echo "Check is true<br/>";
// update row


}elseif (// wat moet hier instaan? //){

echo "Check is false<br/>";
// add new row

}
}
}

Wat moet ik bij de elseif invullen? Als ik alleen else gebruik krijg ik meerdere keren "Check is false" te zien.

Alvast bedankt.
 
PHP hulp

PHP hulp

28/03/2024 21:18:07
 
Thomas van den Heuvel

Thomas van den Heuvel

03/03/2015 14:13:24
Quote Anchor link
Dit klinkt meer als een synchronisatie dan een overzetting.

Om hoeveel records gaat het in beide databases? Hoe zien de tabellen eruit? Hoort het e-mailadres ergens bij, oftewel, wanneer zijn twee e-mailadressen precies "gelijk"?
 
Niels Mensink

Niels Mensink

03/03/2015 14:23:33
Quote Anchor link
Het is een eenzijdige synchronisatie. De ene database heeft alle informatie en de andere een aantal rijen. De informatie van de kleine wordt onderdeel van de grote. De check voer ik uit om dubbele rijen te voorkomen.

Ik krijg nu het volgende te zien :

string(13) "[email protected]" // kleine db - rij 1
string(14) "[email protected]" Check is false
string(16) "[email protected]" Check is false
string(16) "[email protected]" Check is false
string(15) "[email protected]" Check is false
string(23) "[email protected]" Check is false
string(13) "[email protected]" Check is true
string(23) "[email protected]" // kleine db - rij 2
string(14) "[email protected]" Check is false
string(16) "[email protected]" Check is false
string(16) "[email protected]" Check is false
string(15) "[email protected]" Check is false
string(23) "[email protected]" Check is true
string(13) "[email protected]" Check is false
string(30) "[email protected]" // kleine db - rij 3
string(14) "[email protected]" Check is false
string(16) "[email protected]" Check is false
string(16) "[email protected]" Check is false
string(15) "[email protected]" Check is false
string(23) "[email protected]" Check is false
string(13) "[email protected]" Check is false
Gewijzigd op 03/03/2015 14:24:25 door Niels Mensink
 
Thomas van den Heuvel

Thomas van den Heuvel

03/03/2015 14:52:49
Quote Anchor link
Misschien is de volgende oplossing wat omslachtig, maar je hoeft volgens mij maar 1 loop te hebben waarbij je de kleine database doorloopt. En als je grote database op een of andere manier transacties kan gebruiken des te beter, dan kun je eerst een "dry-run" doen om te kijken of je complete update-proces goed gaat, en deze dan in het geheel (of in het geheel niet) uitvoeren.

Zoiets dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
db_groot start transactie
    db_klein loop door records
        db_groot controle emailadres aanwezig?
            doe update
        anders
            doe insert
        db_groot einde controle emailadres
    db_klein einde loop
db_groot transactie rollback (voor dry run)
(of db_groot transactie commit om alles bij te werken)


En onderweg kun je allerlei zaken afdrukken/dumpen om te kijken of de sync goed gaat.

EDIT: let wel op dat als je inserts doet en deze vervolgens rollbacked, dat de auto_increment ids dan wel zijn ingenomen (maar dat zou eigenlijk geen probleem moeten zijn).
EDIT: en nog beter is natuurlijk als je hiervoor een aparte test-database gebruikt...
Gewijzigd op 03/03/2015 14:57:24 door Thomas van den Heuvel
 
Niels Mensink

Niels Mensink

03/03/2015 15:57:59
Quote Anchor link
Dank je wel Thomas. Ik ga er verder mee aan de slag :)
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

03/03/2015 19:42:12
Quote Anchor link
In het geval MySQL ON DUPLICATE KEY UPDATE.
Je maakt de kolom met het emailadres uniek, en MySQL doet de rest.

Heb je het trouwens over twee verschillende databases op verschillende servers?
Anders kan je gwoon met INSERT .... SELECT werken.
 



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.