[mysql] probleem met dubbele invoer

Pagina: 1
Acties:
  • 109 views sinds 30-01-2008
  • Reageer

  • FaceMan
  • Registratie: September 1999
  • Laatst online: 12-08 08:58
Ik zit met een probleem:

Wij werken hier met een urenregistratieprogramma via php/mysql.
Mensen kunnen hier hun gewerkte uren in een tabel wegschrijven.
Van belang is hier: id (id van de werknemer), datum (datum waarop er gewerkt is), van (de van tijd), tot (de tot tijd).
Iedere invoer heeft een uniek ID.

Nu vullen sommige mensen 'per ongeluk' 2x hun uren in. dit ziet er dan zo uit:
id datum tot van
1 10-10-03 12.00 13.00
2 10-10-03 12.00 13.00

Door de ontwerper van de db is hier geen rekening meegehouden.

Nu probeer ik een query te schrijven die deze dubbele records voor mij weergeeft.
Ik moet dus een where maken waarin ik zeg: where tabel.datum = tabel.datum and tabel.tot = tabel.tot

Dit werkt in ieder geval niet :)
Hoe kan ik dit oplossen zodat het wel werkt.

Ps het gaat om een tabel met honderduizenden records.
ps2 heb al op het fora en google gezocht maar kan niks vinden

[ Voor 5% gewijzigd door FaceMan op 04-11-2003 15:01 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Waarom leg je geen unieke index/constraint op die combinatie van velden?

https://fgheysels.github.io/


Verwijderd

Als je de tabel wilt doorzoeken op duplicaten, moet je de tabel 2 keer gebruiken :) en wel op de volgende manier:
SQL:
1
2
FROM tabel as t1, tabel as t2
WHERE t1.datum = t2.datum AND t1.tot = t2.tot

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Ik denk dat je veel hebt aan een count icm een having. Maar in principe sluit ik me aan bij whoami. Voorkomen is beter dan genezen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • FaceMan
  • Registratie: September 1999
  • Laatst online: 12-08 08:58
Aan het ontwerp van de database kan niks gewijzigd worden.
Ik ben geen systeembeheerder, behoor tot het projectmanagment en moet kijken of de uren kloppen.

De afdeling IT is hier op het moment te druk voor en ik wil zelf gewoon een query schrijven zodat wij niet handmatig op dubbele records hoeven te zoeken.
Vandaar :)

Ik weet dus ook niet OF dit wat ik wil wel met een query kan, ik kom er in ieder geval niet uit

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Als je gewoon een query wilt schrijven, kan je het doen zoals Janoz zegt:
met een COUNT() en een GROUP BY

code:
1
2
3
4
SELECT count(*), datum, tot, van
FROM
GROUP BY datum, tot, van
HAVING count(*) >= 2

[ Voor 6% gewijzigd door whoami op 04-11-2003 15:11 ]

https://fgheysels.github.io/


  • FaceMan
  • Registratie: September 1999
  • Laatst online: 12-08 08:58
kijk nu ben ik al een heel eind verder,
harstikke bedankt !

Verwijderd

whoami schreef op 04 november 2003 @ 15:11:
Als je gewoon een query wilt schrijven, kan je het doen zoals Janoz zegt:
met een COUNT() en een GROUP BY

code:
1
2
3
4
SELECT count(*), datum, tot, van
FROM
GROUP BY datum, tot, van
HAVING count(*) >= 2
Euhmmm, de id hoort ook bij de rij he! Nu zul je veel meer 'dubbele rijen' eruit krijgen. De juiste query voor de dubbele rijen is:

code:
1
2
3
4
SELECT id, datum, van, tot
FROM tabel
GROUP BY id, datum, van, tot
HAVING count(*) > 1;


Ik hoop niet dat de topicstarter jouw antwoord klakkeloos heeft overgenomen, want dan zou het best eens kunnen dat hij onterecht uren van werknemers heeft gedelete :o

Verwijderd

Verwijderd schreef op 04 november 2003 @ 16:52:
Euhmmm, de id hoort ook bij de rij he! Nu zul je veel meer 'dubbele rijen' eruit krijgen. De juiste query voor de dubbele rijen is:

code:
1
2
3
4
SELECT id, datum, van, tot
FROM tabel
GROUP BY id, datum, van, tot
HAVING count(*) > 1;


Ik hoop niet dat de topicstarter jouw antwoord klakkeloos heeft overgenomen, want dan zou het best eens kunnen dat hij onterecht uren van werknemers heeft gedelete :o
In zijn voorbeeld hebben de dubbele enties wel verschillende IDs.

Verwijderd

Verwijderd schreef op 04 november 2003 @ 16:55:
[...]


In zijn voorbeeld hebben de dubbele enties wel verschillende IDs.
Hmmmm, dan vraag ik me af of de database niet fundamenteel fout in elkaar zit of dat de topicstarter een verkeerde aanname doet. De id is het id van de werknemer, dus ik neem aan dat er dan ook nog een soort van werknermers(id, naam, ...) tabel is. Maar in deze tabel kan een werknemer dus verschillende id's aannemen? Hoe weet je dan in godsnaam welke urenregistratie bij welke werknemer hoort :?
Pagina: 1