Avatar billede skagen Nybegynder
04. juli 2006 - 10:12 Der er 14 kommentarer og
1 løsning

Udtrækning efter første bogstav i felt

Hej

Jeg har en hjemmeside (php) med en database (mysql) over sange. Jeg kunne godt tænke mig at kunne trække sange ud efter første bogstav i titlen, noget i retning af:

SELECT * FROM songs WHERE "firstletter(title)==a"

,hvor det der står i anførselstegn er min pseudokode for at få alle sange der begynder med bogstavet a.

Spørgsmålet er nu: Kan dette lade sig gøre i "ren SQL" eller bliver jeg nød til at trække alle records ud og selv lave noget kode der filtrerer?

mvh Anders Skagen
Avatar billede fennec Nybegynder
04. juli 2006 - 10:16 #1
Du kunne f.eks bruge LIKE metoden:
"SELECT * FROM songs WHERE title LIKE 'a%'"

% er et wildcard så den matcher alt der starter med a.
Avatar billede fennec Nybegynder
04. juli 2006 - 10:18 #2
ellers kan du også bruge LEFT():
"SELECT * FROM songs WHERE LEFT(title,1) = 'a'"

Kunne forstille mig at LEFT() var lidt hurtigere performancemæssig, men har ikke noget at backe det op med.
Avatar billede michael_stim Ekspert
04. juli 2006 - 10:18 #3
LIKE 'a%'" //Starter på a
LIKE '%a'" //Ender på a
LIKE '%a%'" //Har a et eller andet sted i ordet
Avatar billede michael_stim Ekspert
04. juli 2006 - 10:27 #4
Kan ikke lige huske hvordan det er med casesensivity, men ellers kan du bruge:
WHERE lower(title) LIKE 'a%'"
for at få ord der starter med både store og små a'er.
Avatar billede barklund Nybegynder
04. juli 2006 - 11:17 #5
LIKE er altid versalufølsom, med mindre det ene af ordene er en BINARY streng:

WHERE BINARY title LIKE 'a%'

Vil kun matche, hvor titlen starter med lille a.

Og ja, jeg tror nu også, at LEFT vil være hurtigst. Desværre kan MySQL vist endnu ikke lave indekser på funktionskald (som postgresql kan), så alternativt burde man nok lave et felt med første bogstav, som man indekserede (om performance var et issue).

--
Morten Barklund
Avatar billede trophymanager Nybegynder
04. juli 2006 - 13:45 #6
Det kommer vidst an på den collation mysql har hvorvidt LIKE kender forskel på store og små bogstaver.
Avatar billede skagen Nybegynder
04. juli 2006 - 23:08 #7
Tak for de hurtige og brugebare svar! LEFT(LOWER(title),1) var lige hvad jeg stod og manglede. Performance optimering er ikke relevant i øjeblikket.

fennec: Kan du ikke lave et svar så jeg kan komme af med mine point :-)

mvh Anders
Avatar billede skagen Nybegynder
04. juli 2006 - 23:30 #8
michael stim: Kan du ikke også lave et svar - så får du din del af kagen.

mvh Anders
Avatar billede michael_stim Ekspert
04. juli 2006 - 23:34 #9
Nej tak, spandt såmänd bare videre på fennecs svar ;o)
Avatar billede skagen Nybegynder
05. juli 2006 - 01:42 #10
OK. Der er ellers point nok til alle. Jeg kan se at 100 måske var lidt overdrevet i forhold til sværhedsgraden - men på den anden side, så har jeg ikke så meget andet at bruge pointene til ...

Venter på et svar ....

mvh Anders
Avatar billede fennec Nybegynder
05. juli 2006 - 08:17 #11
100 er lidt meget. 30 er mere end nok til mig.

.o) <-- One Eyed Jack
Avatar billede skagen Nybegynder
05. juli 2006 - 09:08 #12
Hmmmm. Jeg skal vist øve lidt på det her. Trykkede på "Accepter" og vupti - fennec fik 100 point. Havde regnet med at få mulighed for at ændre point og lign. inden det gik igennem. I dette tilfælde er det helt OK med mig at fennec får pointene, men en anden gang ville det være rart at vide hvordan man nedjusterer eller deler point ved accept af svar. Har forgæves ledt efter vejledning i "Sådan opretter og afslutter man et spørgsmål" eller lignende under Info.  ???

mvh Anders
Avatar billede fennec Nybegynder
05. juli 2006 - 09:33 #13
Avatar billede michael_stim Ekspert
05. juli 2006 - 09:37 #14
Hvis du bare skal uddele el del af de point du har tilbudt, lägger du selv et svar og markerer jer begge to (eller hvor mange der nu skal dele pointene). Tror også der findes en knap (kan ikke rigtig huske det), hvor på der stå avanceret, som er beregnet til at dele selvdefinieret point til de man har markeret.
Avatar billede skagen Nybegynder
05. juli 2006 - 10:26 #15
OK. Det vil jeg prøve næste gang. Tak for hjælpen!

mvh Anders Skagen
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
Computerworld tilbyder specialiserede kurser i database-management

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