login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Delete dubbele gegevens (Opgelost)

Offline Chilion - 08/04/2008 14:41
Avatar van ChilionMySQL interesse Hallo allemaal,

Ik heb een database waarin urengeregistreerd worden. Dat registreren gaat mbv een PHP pagina waar de betreffende werknemers heen surfen en het invullen.

Echter, om ze vaak met 2 mensen op pad zijn is het zo dat ze tegelijk voor 2 werknemers kunnen registreren. Natuurlijk gaat dat ook fout. Er zijn medewerkers die in hun eentje werken, en een aantal van hen hebben in het invul formulier 2x dezelfde naam in gevuld. Met als gevolg dat de database nu dus niet meer goed is omdat er dubbele dingen instaan.

Ik gebruik natuurlijk een unique ID, dat wordt alsvolgt opgebouwd:
Timestamp, plus voor de eerste werknemer een 1, en voor de 2de een 2.
Nu wil ik dus een aantal x wat dingen met een 2 erachter eruit slopen, MAAR niet allemaal!

Hoe ga ik dat voor elkaar krijgen?
In feite komt het er dus op neer dat de regel exact hetzelfde is, behalve het ID, dat verschilt aan het eind dus, dat is of een 2 of een 1.

Hulp is zéér welkom!!

Chilion

10 antwoorden

Gesponsorde links
Offline yetti4 - 08/04/2008 15:20 (laatste wijziging 08/04/2008 15:21)
Avatar van yetti4 JS interesse ff schetsje hoe het zou moeten uitzien volgens mij:
  1. $result = mysql_query("Select naam from users");
  2. while($row=mysql_fetch_assoc($result))
  3. {
  4. $resultaat = mysql_query("Select count(id) from users where naam=".$row['naam']);
  5. if($resultaat > 1) {
  6. //verwijderen met dat id
  7. }
  8. }
Offline Chilion - 08/04/2008 15:32 (laatste wijziging 08/04/2008 15:50)
Avatar van Chilion MySQL interesse Ik heb nu dus dit :

SELECT COUNT(*) AS Expr1, LEFT(ID, 8) AS Expr2, Datum, Werknemer, Projectcode, Werkcode, Begintijd, Eindtijd
FROM urenregistratie
GROUP BY LEFT(ID, 8), Datum, Werknemer, Projectcode, Werkcode, Begintijd, Eindtijd

Hij geeft ook keurig aan welke er dubbel zijn en welke niet. Nu moet hij dus van alle uitkomsten bij een 2tje 1 deleten. Hoe doe ik dat nu?

Chilion
Offline yetti4 - 08/04/2008 16:18
Avatar van yetti4 JS interesse
  1. $result = mysql_query("Select naam from users");
  2. while($row=mysql_fetch_assoc($result))
  3. {
  4. $resultaat = mysql_query("Select id from users where naam=".$row['naam']);
  5. while($rowaat = mysql_fetch_assoc($result))
  6. {
  7. mysql_query("DELETE FROM users WHERE id=".$rowaat['id']) or die (mysql_error());
  8. }
  9. }
  10. }

ff me script dan maar afgemaakt 
Offline Chilion - 08/04/2008 16:58
Avatar van Chilion MySQL interesse Hmm oke, maar ik voer hem uit in een MSSQL omgeving, en ik probeer het rechstreeks te doen vanuit SQL, gaat dat lukken?
Offline yetti4 - 08/04/2008 16:59
Avatar van yetti4 JS interesse waarom zou je? voer gewoon php code uit, ff bestand aanmaken en openen
Offline Chilion - 15/04/2008 12:13 (laatste wijziging 15/04/2008 12:26)
Avatar van Chilion MySQL interesse Zo eventjes een heel erg late reactie, maar het werkt niet goed.
Hij voert het bestand wel uit, maar hij delete geen dubbele gegevens, mijn aangepaste code is dit:

  1. <?php
  2.  
  3. $SERVER = ;
  4. $ADMIN_NAME = ;
  5. $ADMIN_PASS = ;
  6. $DATABASE = ;
  7.  
  8. $Connection = mssql_connect($SERVER, $ADMIN_NAME, $ADMIN_PASS)
  9. or die ("Can't connect to Microsoft SQL Server");
  10.  
  11. mssql_select_db($DATABASE, $Connection)
  12. or die ("Can't connect to Database");
  13.  
  14. $result = mssql_query("SELECT* FROM UVTplay");
  15. while($row=mssql_fetch_assoc($result))
  16. {
  17. $resultaat = mssql_query("SELECT ID FROM UVTplay WHERE medewerker=".$row['medewerker']);
  18. if(mssql_affected_rows()>1)
  19. {
  20. while($rowaat = mssql_fetch_assoc($result))
  21. {
  22. mssql_query("DELETE FROM UVTplay WHERE ID=".$rowaat['ID']) or die (mssql_error());
  23. }
  24. echo 'Wel dubbele gegevens gevonden, deze worden verwijderd.';
  25. }
  26.  
  27. else
  28. {
  29. echo 'geen dubbele gegevens gefunden';
  30. }
  31. }
  32.  
  33. ?>


Hij geeft een wit scherm, hij doet dus niks waarschijnlijk. Hoe kan dat?
Offline Rens - 15/04/2008 12:45
Avatar van Rens Gouden medaille

Crew algemeen
Niet zo moeilijk doen 
Je gebruikt MSSQL zie ik.
Dan kun je het heel simpel doen met een SELECT INTO statement:
  1. SELECT column_name(s) INTO newtable [IN externaldatabase]
  2. FROM source

En dan zou je er ook nog een DISTINCT bij kunnen zetten, zodat ie alle dubbele er uit laat 
Offline Chilion - 15/04/2008 13:16
Avatar van Chilion MySQL interesse Ik wil alleen de dubbele gegevens eruit halen, ik hoef ze niet naar een andere tabel te hebben!

Mijn vorige code is wel een eind op weg, maar niet helemaal goed denk ik. Ik krijg daar gewoon een wit scherm.
Offline Rens - 15/04/2008 17:17
Avatar van Rens Gouden medaille

Crew algemeen
Het is veel makkerlijk om het te doen zoals ik zei...
1. Gooi alle unieke in een tijdelijke tabel;
2. Leeg je originele tabel;
3. Zet alles weer terug.
Klaar!
Offline Chilion - 17/04/2008 09:42
Avatar van Chilion MySQL interesse Tzijn 20000 regels 
Maar tis ondertussen opgelost! 

Bedankt!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.23s