Vonbo Skrevet 17. januar 2006 Del Skrevet 17. januar 2006 Hei. Jeg trenger noen tips til hvordan jeg skal søke i database. Jeg vil ha ett søkefelt på en webside hvor jeg f.eks skriver Ole, og alle navn i f.eks brukertabellen som inneholder noe med Ole returneres. Vet noen om noen ferdie søkescript jeg kan bruke til dette, evt. hvor krevende er dette? Jeg har god erfaring i php og mysql, men har ikke benyttet noen søkemetoder før. Jeg vet at mysql-databaser har noe innebygget greier, men ikke hvordan det fungerer. Noen tips? Takker og bukker. Lenke til kommentar
mikaelandre Skrevet 17. januar 2006 Del Skrevet 17. januar 2006 vet ikke hva som er best, men her er en veldig enkel sql-spørring som gjør akkurat det: SELECT * FROM Person WHERE navn LIKE '%Ole%'; Her får du alle som har 'Ole' en eller annen plass i navnet sitt. Kutt ut det første prosenttegnet for å få kun navn som starter på Ole. Lenke til kommentar
roac Skrevet 17. januar 2006 Del Skrevet 17. januar 2006 vet ikke hva som er best, men her er en veldig enkel sql-spørring som gjør akkurat det: SELECT * FROM Person WHERE navn LIKE '%Ole%'; Her får du alle som har 'Ole' en eller annen plass i navnet sitt. Kutt ut det første prosenttegnet for å få kun navn som starter på Ole. 5452324[/snapback] For det første, hyggelig å se et av navnene mine dukker opp. Men, til saken. Løsningen din vil fungere helt fint, men det vil være en fordel å hente ut bare den informasjonen du trenger. Select * ... bør med fordel unngås. Lenke til kommentar
Vonbo Skrevet 18. januar 2006 Forfatter Del Skrevet 18. januar 2006 Nydelig. Enkelt, og bra svar. Det er jeg fan av Hva om det skrives f.eks. 'Ole konsulent' i tekstfeltet, og resultatet skal være alle tabell-innlegg som inneholder bare Ole, bare konsulent, eller begge deler i forskjellige kolonner? Var det forståelig? Vil SELECT * FROM Person WHERE navn LIKE '%Ole konsulent%'; finne Ole i en kolonne i f.eks rad med id 9, og konsulent i en annen kolonne, men samme rad med id 9? Lenke til kommentar
roac Skrevet 18. januar 2006 Del Skrevet 18. januar 2006 (endret) Nydelig. Enkelt, og bra svar. Det er jeg fan av Hva om det skrives f.eks. 'Ole konsulent' i tekstfeltet, og resultatet skal være alle tabell-innlegg som inneholder bare Ole, bare konsulent, eller begge deler i forskjellige kolonner? 5459289[/snapback] select * from Person where (Navn like '%Ole%') or (Stilling like '%Konsulent%') Edit: Liten logsisk feil Endret 18. januar 2006 av roac Lenke til kommentar
mikaelandre Skrevet 18. januar 2006 Del Skrevet 18. januar 2006 (endret) Nydelig. Enkelt, og bra svar. Det er jeg fan av Hva om det skrives f.eks. 'Ole konsulent' i tekstfeltet, og resultatet skal være alle tabell-innlegg som inneholder bare Ole, bare konsulent, eller begge deler i forskjellige kolonner? 5459289[/snapback] select * from Person where (Navn like '%Ole%') or (Stilling like '%Konsulent%') Edit: Liten logsisk feil 5459684[/snapback] det der hadde funket om du hadde 2 tekstfelt, ett for navn og ett for stilling... hvis ikke er det vanskelig å vite hva som er navn og hva som er stilling... Dette hadde funket om begge deler var navn: SELECT navn FROM Person WHERE navn LIKE '%Ole%' OR navn LIKE '%konsulent%' Her vil du få alle med Ole i, og alle med konsulent i. vil da selvfølgelig også få alle med begge 2. de med begge ord vil vel komme to ganger, så da kan du bruke SELECT DISTINCT for å slippe det Endret 18. januar 2006 av mikaelandre Lenke til kommentar
roac Skrevet 19. januar 2006 Del Skrevet 19. januar 2006 Nydelig. Enkelt, og bra svar. Det er jeg fan av Hva om det skrives f.eks. 'Ole konsulent' i tekstfeltet, og resultatet skal være alle tabell-innlegg som inneholder bare Ole, bare konsulent, eller begge deler i forskjellige kolonner? 5459289[/snapback] select * from Person where (Navn like '%Ole%') or (Stilling like '%Konsulent%') Edit: Liten logsisk feil 5459684[/snapback] det der hadde funket om du hadde 2 tekstfelt, ett for navn og ett for stilling... hvis ikke er det vanskelig å vite hva som er navn og hva som er stilling... Dette hadde funket om begge deler var navn: SELECT navn FROM Person WHERE navn LIKE '%Ole%' OR navn LIKE '%konsulent%' Her vil du få alle med Ole i, og alle med konsulent i. vil da selvfølgelig også få alle med begge 2. de med begge ord vil vel komme to ganger, så da kan du bruke SELECT DISTINCT for å slippe det 5459797[/snapback] Opprinnelig innlegg var selvmotsigende, eller enda mer komplekst, så jeg valgte en "passende" løsning. Strengt tatt, for å være dødlig pirkete, så blir løsningen på det vedkommende spør om noe i retning av: select * from person where ((etfelt like '%ole%) or (etfelt like%konsulent)) or ((annetfelt like %ole%) and (annetfelt like %konsulent)) En slik spørring kan tyde på (uten at det nødvendigvis er slik) at dataene på en eller annen måte bør omstruktureres. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå