voorwaarde in sql

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

  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 23:07
Hoe kan ik in sql een voorwaarde meegeven zoals bij een geslacht dat je alleen m of v mag invoeren. Graag zonder php oplossingen.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 28-08 15:58

gorgi_19

Kruimeltjes zijn weer op :9

Alleen m of v? Kan je dan ook oplossen door middel van een bit (of true/false veld of hoe je het dan ook wilt noemen)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 23:07
gorgi_19 schreef op 19 november 2002 @ 11:11:
Alleen m of v? Kan je dan ook oplossen door middel van een bit (of true/false veld of hoe je het dan ook wilt noemen)
Maar als je een bit gebruikt doe je dat natuurlijk met een int en daar kan je ook andere getallen invoeren. Mijn vraag was dus eigenlijk kan je het ingevoerde controleren in sql?

  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06-2025
Kleine tip: de WHERE clause in het SELECT statement....
Trouwens.... dit is echt echt echt heel heel heel heel heel elementair hoor...
Als je dit al niet weet, hoe kun je dan beginnen met proggen...
Begin eerst maar eens een SQL tutorial door te nemen.

Fuck me if I'm wrong, but isn't your name Gretchen?


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 28-08 15:58

gorgi_19

Kruimeltjes zijn weer op :9

gomaster schreef op 19 november 2002 @ 11:15:
[...]


Maar als je een bit gebruikt doe je dat natuurlijk met een int en daar kan je ook andere getallen invoeren. Mijn vraag was dus eigenlijk kan je het ingevoerde controleren in sql?
0 of 1 is in principe alles......

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Je kan gebruik maken van een Stored Procedure om de data "te inserten" in je DB. In de stored procedure kan je je invoer controleren op bepaalde voorwaarden. Als deze niet juist zijn, geef je een bv. error code terug.

Je kan natuurlijk ook de invoer in je UI controleren.

Verwijderd

Hij wil invoer controleren, niet uitvoer. Maar dat is niet echt mogelijk..

  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 23:07
Theguide schreef op 19 November 2002 @ 11:19:
Kleine tip: de WHERE clause in het SELECT statement....
Trouwens.... dit is echt echt echt heel heel heel heel heel elementair hoor...
Als je dit al niet weet, hoe kun je dan beginnen met proggen...
Begin eerst maar eens een SQL tutorial door te nemen.
We hebben het hier over CREATE. Dus:

code:
1
2
3
4
CREATE TABLE test 
{
geslacht      CHAR(1)    NOT NULL
}

en achter char dus een voorwaarde m of v.

Verwijderd

Volgens mij haal je 2 dingen door elkaar, SQL gebruik je namelijk om 'opdrachten' te geven aan een database. Voor het afvangen van een invoer zou je toch echt een programmeertaal moeten gebruiken volgens mij (PHP, ASP enz).
En als je in een DB een true/false veld op neemt kan die alleen maar 1 of 0 zijn, dus als de gebruiker iets andere in zou vullen (wat me sterk lijkt als je hem die mogelijkheid niet geeft) dan accepteerd de DB dat gewoon niet.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 19 november 2002 @ 11:21:
Hij wil invoer controleren, niet uitvoer. Maar dat is niet echt mogelijk..

Laten daar nou de triggers voor bedacht zijn? :P
Of natuurlijk de contraints...

Maar als je mysql gebruikt kan je iig al geen triggers toepassen en moet je het in je frontend controleren.
Verwijderd schreef op 19 november 2002 @ 11:22:
Voor het afvangen van een invoer zou je toch echt een programmeertaal moeten gebruiken volgens mij (PHP, ASP enz).
Daar zijn triggers en constraints voor volgens mij, als je het in je database wil doen.

  • jurri@n
  • Registratie: Maart 2000
  • Laatst online: 28-08 13:37
Ik weet dat MySQL het datatype ENUM heeft waarmee je dit kunt doen

geslacht ENUM('M','V') NOT NULL -> moet dus een M of een V in staan

  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 23:07
ACM schreef op 19 november 2002 @ 11:22:

[...]

Laten daar nou de triggers voor bedacht zijn? :P

Maar als je mysql gebruikt kan je iig al geen triggers toepassen en moet je het in je frontend controleren.
Ik gebruik de echte sql taal. Geen dialecten (het is voor school).

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

gomaster schreef op 19 november 2002 @ 11:23:
Ik gebruik de echte sql taal. Geen dialecten (het is voor school).

Dat zal wel, maar zolang je niet vermeld met welke database je werkt kan ik moeilijk aangeven of je triggers kan toepassen of niet.

Maar als je bijv Oracle gebruikt, dan kan je prima een constraint op je tabel leggen die alleen maar de invoer van v of m toelaat.
En als je het niet met een constraint wil/mag doen kan je het nog met een trigger op de insert en update doen (die dus bijv een foutmelding geeft als het geen m/v is).

Verwijderd

je kunt dit in de meeste databaseomgevingen door middel van een constraint doen. Deze kun je de waardes in het veld laten controleren.

Zelf zou ik kiezen voor een bit zoals je al is aangeraden. Het datatype bit staat alleen Null, 0 of 1 als waardes toe.
Keuze is aan jou waar 1 of 0 voor staat. NULL staat waarschijnlijk voor Onbekend.

Uiteraard kun je het ook aan de front-end oplossen door alleen die keuzes M/V aan te bieden in de vorm van een combobox. Zou hier niet voor kiezen want je dataintegriteit moet je eigenlijk in de db zelf waarborgen en niet in de front-end.

Verwijderd

Verwijderd schreef op 19 November 2002 @ 11:22:
Volgens mij haal je 2 dingen door elkaar, SQL gebruik je namelijk om 'opdrachten' te geven aan een database. Voor het afvangen van een invoer zou je toch echt een programmeertaal moeten gebruiken volgens mij (PHP, ASP enz).
En als je in een DB een true/false veld op neemt kan die alleen maar 1 of 0 zijn, dus als de gebruiker iets andere in zou vullen (wat me sterk lijkt als je hem die mogelijkheid niet geeft) dan accepteerd de DB dat gewoon niet.
Integriteitswaarborging van je data doe je op de db zelf. Het is klinklare onzin dat je een db alleen gebruikt voor "opdrachten". Dit doen alleen ontwikkelaars die de ballen geen verstand hebben van databases. Gebruik dan alsjeblieft tekstfiles!

Verwijderd

ACM schreef op 19 November 2002 @ 11:22:

[...]


Daar zijn triggers en constraints voor volgens mij, als je het in je database wil doen.
hmm ... ff nagekeken in mijn SQL boek, daar staat idd iets in over constraint. Dit is een manier om een check uit te voeren op een invoer. Miscihien dat je daar ff op moet googlen.

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 28-08 16:43

Dido

heforshe

Verwijderd schreef op 19 November 2002 @ 11:28:
Integriteitswaarborging van je data doe je op de db zelf. Het is klinklare onzin dat je een db alleen gebruikt voor "opdrachten". Dit doen alleen ontwikkelaars die de ballen geen verstand hebben van databases. Gebruik dan alsjeblieft tekstfiles!
Het ging erover dat je SQL alleen maar gebruikt voor opdrachten. Of wou je zeggen dat SQL een DB is?

Maarre, als je indredaad en volwassen database en niet-gedownsizede versie van SQL gebruikt is het antwoord met constraints wel gegeven denk ik :)

Wat betekent mijn avatar?


  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 23:07
bedankt allemaal. Ik ga de mysql enum gebruiken (voor het geval dat jullie wat intereseerd ;)).

Verwijderd

Ik zie nog nergens staan welke database er gebruikt wordt.
Als je op zoek bent naar goed advies dan zal je dat toch moeten vermelden.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dido schreef op 19 november 2002 @ 11:39:
Het ging erover dat je SQL alleen maar gebruikt voor opdrachten. Of wou je zeggen dat SQL een DB is?
SQL is zowel een Data Definition Language als de query-language ;)
Dus in SQL definieer je hoe je tabel eruit ziet en als je dat als een opdracht ziet... sja das dan een definitie puntje :)
gomaster schreef op 19 november 2002 @ 11:40:
bedankt allemaal. Ik ga de mysql enum gebruiken (voor het geval dat jullie wat intereseerd ;)).
Ah, mysql, kon je dat niet eerder zeggen?
gomaster schreef op 19 november 2002 @ 11:23:
Ik gebruik de echte sql taal. Geen dialecten (het is voor school).
Maar DIT is dan niet waar, mysql ondersteund een subset van de 'echte' SQL taal die nog eens deels gewijzigd is ook.
Jij gebruikt dus niet de echte sql taal :P

Verwijderd

met een stukje pl/sql kom je weer een stukje sneller tot het gewenste resultaat.. maar anders kun je ook: accept a_invoer char prompt 'geef alleen m of v op'; gebruiken (Oracle). Niet zo netjes, controleert niet, maar is wel duidelijk :)

okee.. mysql dus... lamaar..

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 19 November 2002 @ 11:45:
met een stukje pl/sql kom je weer een stukje sneller tot het gewenste resultaat.. maar anders kun je ook: accept a_invoer char prompt 'geef alleen m of v op'; gebruiken (Oracle). Niet zo netjes, controleert niet, maar is wel duidelijk :)

okee.. mysql dus... lamaar..

Werkt:
code:
1
2
3
4
create table blaat
(
    geslacht char(1) check (geslacht IN ('m', 'v'))
)

Niet in oracle? (of iets vergelijkbaars, kweet niet of dit 100% sql is, of een postgres-eigen opdracht)

Verwijderd

ACM: je hebt inderdaad een constraint check_condition in de create clause.. kon ook niet anders natuurlijk :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:46
Je moet dus gewoon een domain op dat veld definieren. (Die oplossing werd hier al verschillende keren aangehaald, maar dit is de goede benaming). Hierdoor zorg je er dus voor dat het DBMS enkel de gespecifieerde waarden voor dat veld toelaat. (In dit geval dus M en V.

https://fgheysels.github.io/


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 28-08 16:43

Dido

heforshe

ACM schreef op 19 November 2002 @ 11:43:
SQL is zowel een Data Definition Language als de query-language ;)
Dus in SQL definieer je hoe je tabel eruit ziet en als je dat als een opdracht ziet... sja das dan een definitie puntje :)
'tis een kwestie van definitie, idd.
Maar op het moment dat ik door middel van SQL aan DB2 vertel wat voor tabel ik wil dat ie definieert, zie ik dat toch als een opdracht...

Maar goed, het blijkt om MySQL te gaan.

Wat betekent mijn avatar?

Pagina: 1