[PHP] 2 tabellen samenvoegen m.b.v. mysql query

Pagina: 1
Acties:

Onderwerpen


  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Ik beschik over 2 tabellen met e-mailadressen. Ik wil deze graag samenvoegen tot 1 tabel.
Ik zit nu alleen met het problemen dat sommige e-mailadressen uit tabel 2 al bestaan in tabel 1.

De tabellen zijn als volgt opgebouwd:

Tabel 1 - mailinglist
id
emailadres
klant ja/nee

Tabel 2 - naw
id
email

Omdat ik er met behulp van mysql query's niet uitkwam heb ik de volgende "omslachtige" functie gemaakt.
De functie zorgt ervoor dat alle e-mailadressen uit tabel 1 wordt gehaald en in een array wordt gezet, vervolgens met een loop door de array en dan alle rijen verwijderen uit tabel 2 met een e-mailadres uit de array. Zo houd ik dus een "schone" tabel 2 over met e-mailadressen die niet in tabel 1 staan.

Deze 2 schone tabellen dan nog samenvoegen is voor mij geen probleem, het gaat me dus nu alleen om dat ik 2 tabellen heb die niet dezelfde e-mailadressen bevatten.

Ik heb de volgende functie in elkaar gezet, maar dat werkt helaas dus niet :( .

PHP:
1
2
3
4
5
6
7
8
9
10
include('db.php');

$result1 = mysql_query("SELECT emailadres FROM mailinglist;");
while($row1 = mysql_fetch_array($result1)) {
    $array[] = $row1['emailadres'];
}

foreach($array as $key=>$value) {
    mysql_query("DELETE FROM naw WHERE email = '".$value."';") or die ('foutje: '.mysql_error());
}


Wie kan mij vertellen waarom dat niet werkt en wie kan mij weer op weg helpen :)

Verwijderd

SQL:
1
SELECT id,emailadres FROM mailinglist WHERE emailadres NOT IN (SELECT email FROM naw)

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:33

MueR

Admin Tweakers Discord

is niet lief

Wat dacht je van tabel 1 leegtrekken en in een array zetten (met email adres als key), vervolgens tabel 2 in dezelfde array dumpen? Gegarandeerd maar 1 regel per email adres.

Anyone who gets in between me and my morning coffee should be insecure.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Of je gaat helemaal nifty dingen doen:
http://bogdan.org.ua/2007...if-not-exists-syntax.html

:P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
MueR schreef op donderdag 19 november 2009 @ 17:31:
Wat dacht je van tabel 1 leegtrekken en in een array zetten (met email adres als key), vervolgens tabel 2 in dezelfde array dumpen? Gegarandeerd maar 1 regel per email adres.
Dat werkt helaas niet. Ik krijg (met de onderstaande code) nog steeds dubbele resultaten.

Nog even voor de duidelijkheid, tabel 1 bestaat uit alleen maar klanten. Tabel 2 bestaat uit klanten en niet bestaande klanten.

PHP:
1
2
3
4
5
6
7
8
9
10
11
$result1 = mysql_query("SELECT emailadres, klant FROM mailinglist;");
while($row1 = mysql_fetch_array($result1)) {
    $array[$row1['emailadres']] = $row1['klant'];
}

$result2 = mysql_query("SELECT email FROM naw;");
while($row2 = mysql_fetch_array($result2)) {
    $array[$row2['email']] = "Nee";
}

print_r($array);

Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Verwijderd schreef op donderdag 19 november 2009 @ 17:08:
SQL:
1
SELECT id,emailadres FROM mailinglist WHERE emailadres NOT IN (SELECT email FROM naw)
Je query zag er veelbelovend uit, maar ik krijg nog steeds alle e-mailadressen uit tabel2, ook diegene die al in tabel 1 staan.

PHP:
1
2
3
4
5
6
$result = mysql_query("SELECT email FROM naw WHERE email NOT IN (SELECT emailadres FROM mailinglist)");
while($row = mysql_fetch_array($result)) {
    $count++;
    echo $row['email']."<br>";
}
echo $count;

Acties:
  • 0 Henk 'm!

Verwijderd

Is er iets mis met mysql_num_rows? (Ipv je count..)

Acties:
  • 0 Henk 'm!

Verwijderd

Misschien wel een andere characterset of een ander formaat (CHAR/VARCHAR) ?

Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Verwijderd schreef op vrijdag 20 november 2009 @ 11:17:
Is er iets mis met mysql_num_rows? (Ipv je count..)
Nee hoor, maar die count is gewoon een simpele en snelle oplossing om te zien hoeveel rijen ik over houd :)

Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Oplossing gevonden!

Al met al was het een stomme fout van mijzelf |:(.

Voor het aanmaken en vullen van tabel 1 heb ik een PHP script gemaakt, deze zette "per ongeluk" \r\n achter elk e-mailadres. Hierdoor kon nooit de match gemaakt worden tussen tabel 2 en tabel 1. Het vreemde is alleen dat phpmyadmin \r\n niet toont! Ook bij het tonen van de array in PHP was niets te zien. Hierdoor leek het alsof alle e-mailadressen gewoon juist waren. Pas na een mysql export van tabel 1 zag ik in het .sql bestand achter elk e-mailadres \r\n staan.

Stom foutje waar ik dus wat uurtjes aan besteed heb :(.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Met debug functies als var_dump en var_export had je dit wel kunnen zien... :>

{signature}


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Voutloos schreef op vrijdag 20 november 2009 @ 11:48:
Met debug functies als var_dump en var_export had je dit wel kunnen zien... :>
Die kon ik nog niet. Wellicht handig voor toekomstige foutjes :).

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Voutloos schreef op vrijdag 20 november 2009 @ 11:48:
Met debug functies als var_dump en var_export had je dit wel kunnen zien... :>
Niet alleen dat. Als je de string afdrukt en de bron van de pagina bekijkt zie je ook ineens enters die daar niet horen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1