controleren van dubbele rij.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Erik Rijk

Erik Rijk

17/06/2006 18:49:00
Quote Anchor link
Is er een simpele manier bekend om te controleren of je niet exact dezelfde informatie in db rij wilt zetten die er al in staat.

Mvg,

Erik
 
PHP hulp

PHP hulp

17/11/2024 04:51:22
 
Eris -

Eris -

17/06/2006 18:57:00
Quote Anchor link
Ja,


Veld die niet dubbel mag voor komen uniek maken

Dan inserten en error afvangen :)
 
PurpleMadness -

PurpleMadness -

17/06/2006 19:02:00
Quote Anchor link
Of de moeilijke manier en mysql_num_rows gebruiken =P
 
Grizz

Grizz

17/06/2006 19:09:00
Quote Anchor link
zo doe ik het ook altijd...
 
Frank -

Frank -

17/06/2006 19:18:00
Quote Anchor link
UNIQUE maken is de enige juiste manier. De database moet er zelf voor zorgen dat er geen dubbelen (lees: mogelijk corrupte) data in de database wordt gezet.
 
Eris -

Eris -

17/06/2006 19:21:00
Quote Anchor link
PurpleMadness waarom zou je het willen. Het is trager het vraagt een query extra enz..

SELECT * FROM tabel WHERE email = '[email protected]';

en dan mysql_query enz...
en daarna de insert

of meteen de inseert en dan de error goed afvangen...
 
Erik Rijk

Erik Rijk

17/06/2006 19:29:00
Quote Anchor link
ik bedoel dan met een gastenboek bijvoorbeeld.

titel, bericht, poster, email....
als iemand dubbel op de submit knop druk o.i.d.

hoe controleer je dat dan?
elk veld unique maken heeft dan weinig zin,

2x dezelfde titel komt vaker voor toch.

Mvg,

Erik
 
Frank -

Frank -

17/06/2006 19:43:00
Quote Anchor link
De combinatie van kolommen is ook unique te maken. 2x exact hetzelfde bericht door dezelfde persoon op dezelfde datum, is dan niet mogelijk.
 
PurpleMadness -

PurpleMadness -

17/06/2006 19:56:00
Quote Anchor link
Eris:
PurpleMadness waarom zou je het willen. Het is trager het vraagt een query extra enz..

Ja, maar voor de mensen die niet weten hoe ze de andere manier moeten doen enz. ;)
en zo 'trager' is het niet hoor, het is minder dan 1/10 van een seconde verschil, wat doen mensen hier daar toch moeilijk over.. =/
 
Robert Deiman

Robert Deiman

17/06/2006 20:00:00
Quote Anchor link
@Erik

Ik had hier dan weer niet bij nagedacht.. inderdaad kan je de velden voor de foutmelding, want daar gaat het hier over, als combinatie uniek maken.
Dan moet je alleen niet in je functie ook weer gaan verwijzen, zodat die foutmelding ook in je database komt :P
 
Koen verschueren

koen verschueren

17/06/2006 20:00:00
Quote Anchor link
bij enorm veel data wordt dit verschil groter en merk je dit wel...
 
Robert Deiman

Robert Deiman

17/06/2006 20:10:00
Quote Anchor link
@Koen

De hoeveelheid data valt hier (als het goed is) te verwaarlozen.. Het gaat om een foutafhandelingsscript.. maar een bepaalde fout hoeft maar 1 keer voor te komen, omdat dan de fout al bekend is.
Maar toch is de MySQL oplossing de beste, minder kans op fouten.

@Erik

Misschien ook wel leuk om er een Admin bij te maken, waarbij je status op "wordt aan gewerkt" kan zetten, en dat ook terug kan geven aan de gebruiker.. En eventueel een status opgelost, of gewoon de rij deleten uit je error log tabel.
 
Frank -

Frank -

17/06/2006 23:16:00
Quote Anchor link
PurpleMadness:
Eris:
PurpleMadness waarom zou je het willen. Het is trager het vraagt een query extra enz..

Ja, maar voor de mensen die niet weten hoe ze de andere manier moeten doen enz. ;)
en zo 'trager' is het niet hoor, het is minder dan 1/10 van een seconde verschil, wat doen mensen hier daar toch moeilijk over.. =/
Voor mensen die niet weten hoe ze dit moeten maken, is het misschien een leuke uitdaging om het te leren. Zo moeilijk is het niet.

En in die 1/10 van een seconde kan het helemaal fout gaan. Jij controleert of iets al bestaat, antwoord is nee, ondertussen vindt er een INSERT plaats (door een ander script/gebruiker) en vervolgens ga jij op basis van jouw controle nogmaals een INSERT uitvoeren. Resultaat: corrupte database.

En als er iets is dat je ten koste van alles wilt vermijden, dan is dat wel een corrupte database. Wanneer je de data niet meer kunt vertrouwen, ben je reddeloos verloren.
 
Erik Rijk

Erik Rijk

18/06/2006 14:58:00
Quote Anchor link
Frank:
De combinatie van kolommen is ook unique te maken. 2x exact hetzelfde bericht door dezelfde persoon op dezelfde datum, is dan niet mogelijk.


wat bedoel je met de combinatie van kolommen UNIQUE maken?
en hoe voer je de controle uit?

Mvg,

Erik
 
Remco van Arkelen

Remco van Arkelen

18/06/2006 15:10:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ALTER TABLE jouw_tabelletje ADD UNIQUE(kolom1)


Een query zal geweigerd worden als de waarde voor kolom1 al in de tabel staat.

of bijv:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ALTER TABLE jouw_tabelletje ADD UNIQUE(kolom1,kolom2)


Je kunt gewoon een insert of update uitvoeren, als het fout gaat kun je met mysql_errno() de foutcode ophalen en hierop actie ondernemen. De foutcode voor een UNIQUE-overtreding is volgens mij 1062.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$qryInsert
= "INSERT INTO t (kol1,kol2,kol) VALUES( 1, 2, 3)";

if( !mysql_query( $qryInsert, $rConn ) )
{

  if( mysql_errno( ) == 1062 )
  {

    echo 'Waarde bestaat al....';
  }
}

?>
 
Erik Rijk

Erik Rijk

18/06/2006 15:14:00
Quote Anchor link
oke he bedankt.

dus al ik heb:

titel.
bericht.

en ik run deze query:

ALTER TABLE jouw_tabelletje ADD UNIQUE(titel,bericht).

dan moet er een foutmelding komen als er een dubbele melding wordt gepost.

oke thnx :)
 
Remco van Arkelen

Remco van Arkelen

18/06/2006 15:22:00
Quote Anchor link
Juist. Met die ALTER TABLE-statement maak je een wijziging in je tabelstructuur. Er wordt een index gecreëerd op alle combinaties van titel en bericht, deze moeten uniek zijn.

Als er al dubbele gegevens in je database staan zal de ALTER-statement mislukken en zul je eerst die gegevens aan moeten passen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.