Gå til innhold

Søkefelt på webside som finner søkeord i db


Anbefalte innlegg

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
Videoannonse
Annonse

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
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

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
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 av roac
Lenke til kommentar
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 av mikaelandre
Lenke til kommentar
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...