MySQL-Tabellenspalte auf doppelte Einträge prüfen
flo
- php
Hallo zusammen !
Habe zu diesem Problem ein Test-Script geschrieben. Das Funktioniert auch soweit. Nur bei Einträgen > 10000 ist das ganze ein bischen lahm.
Könnte man das Ganze irgendwie besser lösen ?
Tabelle testperfco mit Spalte Nr und EMail
Code:
<?php
require("../db_mysql.inc.php");
// Set the variables for the database access:
$db = new DB_Sql;
$db->Host = "localhost";
$db->Database = "fwinkler";
$db->User = "";
$db->Password = "";
for ($j=1; $j<=10000; $j++)
{
//$j = 10000;
$db->query("SELECT EMail FROM testperfco WHERE Nr='$j'");
$db->next_record();
$EMail = $db->f('EMail');
$db->query("SELECT COUNT(*) AS Doppelt FROM testperfco WHERE EMail='$EMail'");
$db->next_record();
$doppelt = $db->f('Doppelt');
if ($doppelt > 1)
{
print("$doppelt");
print(" ");
print("mal");
print(" ");
print("$EMail");
print(" ");
print("bei Nr $j");
print("<br><br>");
//print("check Nr $j");
//print("<br><br>");
$db->query("UPDATE testperfco SET Error='E-Mail-Adresse checken' WHERE Nr='$j'");
}
/*
else
{
print("$j");
print("<br><br>");
}
*/
}
?>
Hallo,
Bin leider noch kein PHP-Profi, aber zum Grundprinzip der Datenbankabfragen kann ich Dir folgendes sagen:
1. Alle daten mit WHERE NR <= 10000 oder einem anderen Filterkriterium.
2. Den Test auf doppelte Emails würde ich mit einer Liste oder Array o.ä. realisieren, wo alle abgearbeiteten Drinne stehen, tritt eine nochmal auf, Abarbeitung nicht durchführen.
3. Nummern mit Abarbeitung sammeln und dann UPDATE ... WHERE Nr IN (1,2,3..)
HTH
Gruß Frank
Hallo,
Habe zu diesem Problem ein Test-Script geschrieben. Das Funktioniert auch soweit. Nur bei Einträgen > 10000 ist das ganze ein bischen lahm.
Könnte man das Ganze irgendwie besser lösen ?
Tabelle testperfco mit Spalte Nr und EMail
Du könntest z.B. zuerst einmal alle Email-Adressen rausfinden, welche doppelt sind:
SELECT email
FROM testperfco
GROUP BY email
HAVING count(*) > 1
Mit der Liste der so ermittelten Email-Adressen (welche hoffentlich deutlich weniger als 10000 sind *g*) kannst Du dann in einem weiteren Schritt machen, was Du willst.
Allerdings würde ich die Tabellendefinition derart ändern, daß doppelte Einträge gar nicht vorkommen können, Stichwort 'unique index'.
Grüße
Klaus