if statement van resultaten for-loops
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.
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"?
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
Zoiets dus:
Code (php)
1
2
3
4
5
6
7
8
9
10
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)
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
Dank je wel Thomas. Ik ga er verder mee aan de slag :)
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.
In het geval MySQL 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.