Avatar billede kroger Nybegynder
08. september 2001 - 22:02 Der er 9 kommentarer og
2 løsninger

SQL & AND

JEg har en side hvor man kan hente resultatet fra en database ved at søge på amt. Jeg søger på amtet ved at bruge postnumre, og de stemmer ikke lige overens, så man f.eks. kan søge på 9000-9900 for nordjylland f.eks.. Derfor har jeg lavet en sql forespørgsel der spørg om op til ni postnumre, men den kan ikke hente nogen resultater frem overhovedet, og umiddelbart ser forespørglen rigtig nok ud. Her er foresørgslen:
Select * From ba Where kategori like \'%%\' AND postnr >= 9000 AND postnr <= 9541 AND postnr >= 9560 AND postnr <= 9610 AND postnr >= 9640 AND postnr <= 9990 AND postnr >= 9000 AND postnr <= 9541 AND postnr >= 9000 AND postnr <= 9541 AND postnr >= 9000 AND postnr <= 9541 AND postnr >= 9000 AND postnr <= 9541 AND postnr >= 9000 AND postnr <= 9541 AND postnr >= 9000 AND postnr <= 9541 order by navn;

Jeg bruger MSSQL 7.5 til database.

M.V.H.
Danny Krøger
Avatar billede kroger Nybegynder
08. september 2001 - 22:03 #1
Jeg ved godt at der er gentagelser, men det er så den er universel..
Avatar billede sbm Nybegynder
08. september 2001 - 22:28 #2
Først kan jeg ikke lige forstå din

like \'%%\'

Hvorfor overhovedet have den med, hvis du alligevel ikke vælger noget fra?

Dertil kan jeg godt forstå at du ikke får noget output...

where postnr <= 9610 AND postnr >= 9640

Du vil finde et postnr der er mindre eller lig med 9610 OG større end eller lig med 9640. Det er der sgu ikke ret mange tal der er. :-)

Hvad er det mere præcist du prøver at lave?
Avatar billede kroger Nybegynder
08. september 2001 - 22:43 #3
Ok, det havde jeg ikke lige tænkt på:) Kategori lik... er fordi den nogen steder bruges til at hente dem der f.eks. spiller trommer, men i dette tilfælde indeholder den ikke noget. Når jeg kigger nærmere kan jeg godt se at min ide ikke holder. Det den skal bruges til er at man på en side kan vælge hvilket amt man ønsker musikere fra (i dette tilfælde nordjylland) og dette gøres ved at tkke på et kort. I databasen er der bl.a. en kolonne der indeholder postnumre(\"postnr\"), og det er ud fra denne jeg vil \"finde\" amtet. Problemet er jo bare at amt & postnumre ikke følges logisk ad, så jeg ved ikke om der en anden måde at gøre det på ud over at skulle tilføre en kolonne der indeholder amtet hvilket på længere sigt vil kræve en masse manuelt arbejde.

Håber det bragte dig lidt bedre på sporet af min sindsyge(eller umulige:)) ide.

M.V.H.
Danny Krøger
Avatar billede sbm Nybegynder
08. september 2001 - 23:05 #4
Har du et sted i databasen en oversigt over hvilke postnumre der eksempelvis hører til nordjyllands amt?
Avatar billede kroger Nybegynder
08. september 2001 - 23:30 #5
Nej, det har jeg kun på et stykke papir, men du tænker på om man kunne lave en funktion hvor den går ind og tjekker det via den vej og så sætter det ind?
Avatar billede sbm Nybegynder
09. september 2001 - 08:52 #6
Enten det eller også have en tabel i databasen med disse oplysninger...

Jeg går ud fra at dit problem er at fange alle trommeslagere der bor i et bestemt amt, og det gør at du skal søge indenfor flere forskellige nummerintervaller. Eksempelvis postnr 9000 til 9200 og så yderligere et interval mellem 9500 og 9600. Nu kan jeg ikke se hvilke muligheder du har for at opbygge din SQL dynamisk, men dette eksempel skulle gerne resultere i noget i stil med

SELECT * from ba
WHERE kategori like \'%Trommer%\'
  AND (
            (postnr >= 9000 and postnr <= 9200)
            OR (postnr >= 9500 and postnr <= 9600)
      )

Du skal altså have en stor parantes udenom ALLE dine postnr-klausuler, og hvert interval skal være adskilt af en OR, for et nummer kan jo kun ligge i det ene interval ELLER det andet. Ikke begge to. Det enkelte interval (eksempelvis 9000-9200) skal naturligvis være lavet med en AND, for nummeret skal både være lig med eller større 9000 og lig med eller mindre end 9200 før det er et rigtigt nummer.

Jeg håber det gav lidt mening?
Avatar billede sbm Nybegynder
09. september 2001 - 08:54 #7
Jeg kan ikke lige huske det af fri hukommelse, men jeg mener der i SQL også er en BETWEEN kommando, der gør det lidt nemmere at søge efter numre i et interval istedet for at bruge alle de < og > hele tiden.
Avatar billede horsmark Nybegynder
09. september 2001 - 09:50 #8
SELECT navn, efternavn FROM tblMintabel
WHERE postnummer
BETWEEN
((1000 AND 1999) OR (2000 AND 2999) OR (...))
Avatar billede horsmark Nybegynder
09. september 2001 - 09:51 #9
http://sqlcourse.com
http://sqlcourse2.com

check disse ud... der er en testdatabase online med små opgaver tilknyttet. Ret forståeligt og en god øvelse!
Avatar billede horsmark Nybegynder
09. september 2001 - 09:52 #10
husk lige www (damn!)

<mvh> HorsMark </mvh>
Avatar billede kroger Nybegynder
10. september 2001 - 20:41 #11
Jeg fik den til at virke med din ide SBM(and (( postnr >= 900...), det var squ dejligt, between funktionen kunne jeg ikke få til at virke til gengæld. Grunden til at horsmark har fået lidt af medaljen er på grund af det faktisk ret fede link, tak for det!

Tak for hjælpen begge 2, undskyld den sene svartid, men jeg har ikke haft mulighed for at svare før nu.

M.V.H.
Danny Krøger
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester