goeienacht allemaal!

ik ben nu al een tijdje bezig het volgende voor elkaar te krijgen.

1 tabel, 2 kolommen. 3 records
voornaam achternaam
jan de boer
marga visser
jan de boer

hier wil ik de het dubbele record uit halen.
er mag nooit een dubbele combinatie bestaan. (dus mag wel vaker jan voorkomen, ook vaker de boer maar de combinatie jan de boer mag maar 1 keer voorkomen.)

het gaat om bestaande data dus de tabel structuur aanpassen met een constraint kan niet.

kan iemand me hier een beetje op weg helpen?

alvast bedankt!

met vriendelijke groet.

wietse
maak de tabel zo :

CREATE TABLE cijfers (
  id int(11) NOT NULL auto_increment,
  Voornaam varchar NOT NULL default,
  Achternaam varchar NOT NULL default,
  PRIMARY KEY  (id)
) TYPE=MyISAM;

en dan aanroepen met id omdat de id uniek is.

[edit]
komma vergeten xd
SELECT *
FROM joutable
WHERE voornaam LIKE 'jan'
AND achternaam LIKE 'boer'
LIMIT 1

als deze waarde terug geeft bestaat dus de combinatie al ;)
@rvw: Waarom LIKE? Je gebruikt geen wildcards, er moet blijkbaar een volledige match zijn, dan is een = op zijn plaats.

Verder hoef je geen kolommen of zelfs alle kolommen op te vragen, gewoon een true is meer dan genoeg. LIMIT slaat nergens op, heb je al helemaal niet nodig.


SELECT 
  true 
FROM 
  tabelnaam 
WHERE 
  voornaam = 'jan' 
AND 
  achternaam = 'jansen';


Het is overigens wel aan te raden om het datamodel aan te passen en de data op te schonen, een constraint is namelijk de enige oplossing. Vooraf een SELECT-query is een leuk lapmiddel, maar ook niet meer dan dat.
^.^ tijd voor en bak koffie.

vraag me idd ook af waarom ik LIKE er tussen heb gezet.
en ik wist niet dat je SELECT true kon doen :) weer wat geleerd
ps. In PHP kun je met mysql_num_rows() (MySQL) of pg_num_rows() (PostgreSQL) kijken hoeveel resultaten er zijn. Zodra er meer dan 0 resultaten zijn, weet je dat er reeds iemand met deze naam in de tabel staat.
En als het model exact zo is als dat hier staat kun je nog overwegen om een gecombineerde primary key te maken van voornaam en achternaam :).

mijn vraag is alleen waarom je dat zou willen. Zo heten mijn oom en mijn opa bijvoorbeerd exact het zelfde (om maar ff een voorbeeld in de groep te gooien)
Jacco schreef op 22.12.2008 12:53
En als het model exact zo is als dat hier staat kun je nog overwegen om een gecombineerde primary key te maken van voornaam en achternaam :).
Niet doen, dat is een recept voor problemen.

Want wat ga je doen met foreign keys? Die moeten verwijzen naar een primary key maar die bestaat nu ineens uit 2 kolommen en deze waarde van de primary key kan ook nog eens veranderen. Dat wil je echt niet. De waarde van een pk mag nooit veranderen en wil je altijd in één kolom hebben staan. Zorg er voor dat je pk geen enkele betekenis heeft, dan hoeft deze nooit te veranderen en kun je nooit met fk's in de problemen komen.
@Frank, jacco bedoelt vast uniques op beide kolommen :)

Overigens KAN een naam 2 x voor komen. Mijn vriendin heeft ook nog een mede naamgenoot (voor en achternaam exact hetzelfde). Het ligt dus een beetje aan je doel wat je er mee doet.
edit:
Interessante reactie getyped maar tekst kwijt. Sorry maar ga m niet opnieuw typen :P

Reageren