/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Sorter efter forbogstav, hvordan?
Fra : Frederik Junkuhn


Dato : 29-01-09 10:29

Hej,

Jeg har en database med en lang liste af referencer som jeg skal
have vist på en side. Men da det bliver ret uoverskueligt, vi jeg
gerne have at den kun viser dem der starter med "A" f.eks.

Min kode:

mysql_query("SELECT * FROM referencer WHERE navn LIKE 'a'");


På forhånd tak :)

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Gert Krabsen (29-01-2009)
Kommentar
Fra : Gert Krabsen


Dato : 29-01-09 10:40

Frederik Junkuhn skrev:
> Hej,
>
> Jeg har en database med en lang liste af referencer som jeg skal
> have vist på en side. Men da det bliver ret uoverskueligt, vi jeg
> gerne have at den kun viser dem der starter med "A" f.eks.
>
> Min kode:
>
> mysql_query("SELECT * FROM referencer WHERE navn LIKE 'a'");
>

Prøv med

SELECT * FROM referencer WHERE left(navn ,1)='a'

Frederik Junkuhn (29-01-2009)
Kommentar
Fra : Frederik Junkuhn


Dato : 29-01-09 10:37

Gert Krabsen wrote in dk.edb.internet.webdesign.serverside.php:
> Frederik Junkuhn skrev:
> > Hej,
> >
> > Jeg har en database med en lang liste af referencer som jeg skal
> > have vist på en side. Men da det bliver ret uoverskueligt, vi jeg
> > gerne have at den kun viser dem der starter med "A" f.eks.
> >
> > Min kode:
> >
> > mysql_query("SELECT * FROM referencer WHERE navn LIKE 'a'");
> >
>
> Prøv med
>
> SELECT * FROM referencer WHERE left(navn ,1)='a'


Wow! Det var godt nok hurtigt.

Det virker skam også, mange tak :)

nu er jeg ret ny i php, så kan jeg få dig til at forklare kort hvad
"left(navn ,1)='a'" gør?


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Bertel Lund Hansen (29-01-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 29-01-09 11:03

Frederik Junkuhn skrev:

> nu er jeg ret ny i php, så kan jeg få dig til at forklare kort hvad
> "left(navn ,1)='a'" gør?

Det er SQL. Det plukker en delstreng ud begyndende til venstre,
og delstrengen er 1 bogstav lang.

I PHP skal man skrive:

   $partstring=substring($wholestring,0,1);

for at pille det venstre bogstav ud af en streng. 0 angiver at
man starter ved første tegn, og 1 er længden.

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Carsten (29-01-2009)
Kommentar
Fra : Carsten


Dato : 29-01-09 11:21

"Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
news:4iv2o4pbf75qmqopj8c3thgsjf5mt7ctbc@news.stofanet.dk...
> Frederik Junkuhn skrev:
>
>> nu er jeg ret ny i php, så kan jeg få dig til at forklare kort hvad
>> "left(navn ,1)='a'" gør?
>
> Det er SQL. Det plukker en delstreng ud begyndende til venstre,
> og delstrengen er 1 bogstav lang.

Hmmm, gad vide om mySql (som det vel er ?) egentlig kan klare en "like 'a%'
hurtigere end en left(navn ,1)='a' ?

Carsten



Frederik Junkuhn (29-01-2009)
Kommentar
Fra : Frederik Junkuhn


Dato : 29-01-09 11:52

Carsten wrote in dk.edb.internet.webdesign.serverside.php:
> "Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
> news:4iv2o4pbf75qmqopj8c3thgsjf5mt7ctbc@news.stofanet.dk...
> > Frederik Junkuhn skrev:
> >
> >> nu er jeg ret ny i php, så kan jeg få dig til at forklare kort hvad
> >> "left(navn ,1)='a'" gør?
> >
> > Det er SQL. Det plukker en delstreng ud begyndende til venstre,
> > og delstrengen er 1 bogstav lang.
>
> Hmmm, gad vide om mySql (som det vel er ?) egentlig kan klare en "like 'a%'
> hurtigere end en left(navn ,1)='a' ?
>
> Carsten
>
Jeg testede det lige, og det ser ikke ud til at fungere. Men "left(navn
,1)='a'" virker fint. :)

> " You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'LIKE 'a%'' at line
1 "


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Gert Krabsen (29-01-2009)
Kommentar
Fra : Gert Krabsen


Dato : 29-01-09 12:16

Frederik Junkuhn skrev:
> Carsten wrote in dk.edb.internet.webdesign.serverside.php:
>> "Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
>> news:4iv2o4pbf75qmqopj8c3thgsjf5mt7ctbc@news.stofanet.dk...
>>> Frederik Junkuhn skrev:
>>>
>>>> nu er jeg ret ny i php, så kan jeg få dig til at forklare kort hvad
>>>> "left(navn ,1)='a'" gør?
>>> Det er SQL. Det plukker en delstreng ud begyndende til venstre,
>>> og delstrengen er 1 bogstav lang.
>>
>> Hmmm, gad vide om mySql (som det vel er ?) egentlig kan klare en "like 'a%'
>> hurtigere end en left(navn ,1)='a' ?
>>
>> Carsten
>>
> Jeg testede det lige, og det ser ikke ud til at fungere. Men "left(navn
> ,1)='a'" virker fint. :)
>
>> " You have an error in your SQL syntax; check the manual that corresponds to
> your MySQL server version for the right syntax to use near 'LIKE 'a%'' at line
> 1 "
>
>

Den virker fint hos mig:
SELECT * FROM referencer WHERE navn like 'a%'
SELECT * FROM referencer WHERE left(navn ,1)='a'

giver - og bør give samme resultat.

Der skal formentlig ret store datamængder til, før du vil opleve
performance-forskel på de to metoder - men husk at indeksere feltet navn!







Frederik Junkuhn (29-01-2009)
Kommentar
Fra : Frederik Junkuhn


Dato : 29-01-09 13:29

Gert Krabsen wrote in dk.edb.internet.webdesign.serverside.php:
> Frederik Junkuhn skrev:
> > Carsten wrote in dk.edb.internet.webdesign.serverside.php:
> >> "Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
> >> news:4iv2o4pbf75qmqopj8c3thgsjf5mt7ctbc@news.stofanet.dk...
> >>> Frederik Junkuhn skrev:
> >>>
> >>>> nu er jeg ret ny i php, så kan jeg få dig til at forklare kort hvad
> >>>> "left(navn ,1)='a'" gør?
> >>> Det er SQL. Det plukker en delstreng ud begyndende til venstre,
> >>> og delstrengen er 1 bogstav lang.
> >>
> >> Hmmm, gad vide om mySql (som det vel er ?) egentlig kan klare en "like 'a%'
> >> hurtigere end en left(navn ,1)='a' ?
> >>
> >> Carsten
> >>
> > Jeg testede det lige, og det ser ikke ud til at fungere. Men "left(navn
> > ,1)='a'" virker fint. :)
> >
> >> " You have an error in your SQL syntax; check the manual that corresponds to
> > your MySQL server version for the right syntax to use near 'LIKE 'a%'' at line
> > 1 "
> >
> >
>
> Den virker fint hos mig:
> SELECT * FROM referencer WHERE navn like 'a%'
> SELECT * FROM referencer WHERE left(navn ,1)='a'
>
> giver - og bør give samme resultat.
>
> Der skal formentlig ret store datamængder til, før du vil opleve
> performance-forskel på de to metoder - men husk at indeksere feltet navn!
>
>
>
>
>
>
Aha.. Jeg har skrevet "like" med versaler (LIKE). Det virker også for mig..

I skal have 1.000 tak for hjælpen!

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Peter Lykkegaard (29-01-2009)
Kommentar
Fra : Peter Lykkegaard


Dato : 29-01-09 13:38

"Gert Krabsen" wrote

> SELECT * FROM referencer WHERE navn like 'a%'
> SELECT * FROM referencer WHERE left(navn ,1)='a'

> Der skal formentlig ret store datamængder til, før du vil opleve
> performance-forskel på de to metoder - men husk at indeksere feltet navn!
>
Hmm jeg sidder lige og spekulerer om mulighed nr 2 egentlig gør brug af evt
indeks på navn?

- Peter



Stig Johansen (29-01-2009)
Kommentar
Fra : Stig Johansen


Dato : 29-01-09 14:42

Peter Lykkegaard wrote:

> "Gert Krabsen" wrote
>
>> SELECT * FROM referencer WHERE navn like 'a%'
>> SELECT * FROM referencer WHERE left(navn ,1)='a'
>
>> Der skal formentlig ret store datamængder til, før du vil opleve
>> performance-forskel på de to metoder - men husk at indeksere feltet navn!
>>
> Hmm jeg sidder lige og spekulerer om mulighed nr 2 egentlig gør brug af
> evt indeks på navn?

De databaser, jeg kender, vil invalidere brug af index ved enhver form for
brug af funktioner.

Men ved mindre datamængder vil f.eks. MS SQLServer lave en table scan frem
for at bruge tid på at hive fat i b-træet.

--
Med venlig hilsen
Stig Johansen

Carsten (29-01-2009)
Kommentar
Fra : Carsten


Dato : 29-01-09 14:12

"Frederik Junkuhn" <frederik@junkuhn.com> skrev i en meddelelse
news:498176d7$0$90276$14726298@news.sunsite.dk...
> Jeg har en database med en lang liste af referencer som jeg skal
> have vist på en side. Men da det bliver ret uoverskueligt, vi jeg
> gerne have at den kun viser dem der starter med "A" f.eks.

Hvis det altid er sådan at dine "referencer" skal udvælges så kan du måske
overveje at lave en "redundant" kolonne i din tabel som netop indeholder
første bogstav af referencens navn. Det er noget hurtigere for
databasesystemet at lave en exact sammenligning end det er at lave den her
"left" funktion.

Carsten



Frederik Junkuhn (29-01-2009)
Kommentar
Fra : Frederik Junkuhn


Dato : 29-01-09 14:41

Carsten wrote in dk.edb.internet.webdesign.serverside.php:
> "Frederik Junkuhn" <frederik@junkuhn.com> skrev i en meddelelse
> news:498176d7$0$90276$14726298@news.sunsite.dk...
> > Jeg har en database med en lang liste af referencer som jeg skal
> > have vist på en side. Men da det bliver ret uoverskueligt, vi jeg
> > gerne have at den kun viser dem der starter med "A" f.eks.
>
> Hvis det altid er sådan at dine "referencer" skal udvælges så kan du måske
> overveje at lave en "redundant" kolonne i din tabel som netop indeholder
> første bogstav af referencens navn. Det er noget hurtigere for
> databasesystemet at lave en exact sammenligning end det er at lave den her
> "left" funktion.
>
> Carsten
>
> Tja... Nu er dette mit første PHP site, så jeg tror jeg stopper mens legen
er god.. :)

Men forstår jeg dig ret at jeg skal lave en celle i tabellen som jeg angiver
forbogstavet i og lister tabellen efter en istedet for f.eks. id?

Det skal lige siges at den database det skal bruges til næppe kommer over
1.000 rækker, så jeg håber "left" funktionen ikke er "for tung".


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Carsten (29-01-2009)
Kommentar
Fra : Carsten


Dato : 29-01-09 14:56

"Frederik Junkuhn" <frederik@junkuhn.com> skrev i en meddelelse
news:4981b1d0$0$90275$14726298@news.sunsite.dk...
> Men forstår jeg dig ret at jeg skal lave en celle i tabellen som jeg
> angiver
> forbogstavet i og lister tabellen efter en istedet for f.eks. id?
>
> Det skal lige siges at den database det skal bruges til næppe kommer over
> 1.000 rækker, så jeg håber "left" funktionen ikke er "for tung".

så er problemet nok ikke så stort

men min ide gik på følgende... Din nuværende tabel ser måske ud som:

ID | NAVN | (MORE_COLUMNS HERE)
10 | Sven Bendt | (more data here)
11 | Niels Hansen | (more data here)
12 | Niller Petersen | (more data here)

...og din sql til at vise referencer med et bestemt startbogstav ser p.t. ud
som:

SELECT * FROM referencer WHERE left(navn ,1)='N'

Tabellen udvides til at se sådan her ud:

ID | NAVN | ALFANAVN| (MORE_COLUMNS HERE)
10 | Sven Bendt | S | (more data here)
11 | Niels Hansen | N | (more data here)
12 | Niller Petersen | N |(more data here)

Det du så kan gøre når du sætter nye rækker ind er at kolonnen "ALFANAVN"
altid sættes lig med "left(navn ,1)". Du får derved "straffen" ved
indsættelser (som der nok ikke er så mange af) istedet for at få straffen
hver gang der søges blandt dine "referencer". Din nye sql til søgninger
bliver:

SELECT * FROM referencer WHERE alfanavn='N'

Carsten



Gert Krabsen (29-01-2009)
Kommentar
Fra : Gert Krabsen


Dato : 29-01-09 15:25

Carsten skrev:
> "Frederik Junkuhn" <frederik@junkuhn.com> skrev i en meddelelse
> news:4981b1d0$0$90275$14726298@news.sunsite.dk...
>> Men forstår jeg dig ret at jeg skal lave en celle i tabellen som jeg
>> angiver
>> forbogstavet i og lister tabellen efter en istedet for f.eks. id?
>>
>> Det skal lige siges at den database det skal bruges til næppe kommer over
>> 1.000 rækker, så jeg håber "left" funktionen ikke er "for tung".
>
> så er problemet nok ikke så stort
>
> men min ide gik på følgende... Din nuværende tabel ser måske ud som:
>
> ID | NAVN | (MORE_COLUMNS HERE)
> 10 | Sven Bendt | (more data here)
> 11 | Niels Hansen | (more data here)
> 12 | Niller Petersen | (more data here)
>
> ..og din sql til at vise referencer med et bestemt startbogstav ser p.t. ud
> som:
>
> SELECT * FROM referencer WHERE left(navn ,1)='N'
>
> Tabellen udvides til at se sådan her ud:
>
> ID | NAVN | ALFANAVN| (MORE_COLUMNS HERE)
> 10 | Sven Bendt | S | (more data here)
> 11 | Niels Hansen | N | (more data here)
> 12 | Niller Petersen | N |(more data here)
>
> Det du så kan gøre når du sætter nye rækker ind er at kolonnen "ALFANAVN"
> altid sættes lig med "left(navn ,1)". Du får derved "straffen" ved
> indsættelser (som der nok ikke er så mange af) istedet for at få straffen
> hver gang der søges blandt dine "referencer". Din nye sql til søgninger
> bliver:
>
> SELECT * FROM referencer WHERE alfanavn='N'
>

Absolut en løsning. Men den dag sitet bliver en succes, så Frederik
bliver nødt til at gruppere på de to første bogstaver, er det hurtigere
simpelthen at ændre søgningen til

"WHERE left(navn ,1)='Ni'"





Gert Krabsen (29-01-2009)
Kommentar
Fra : Gert Krabsen


Dato : 29-01-09 15:26

Gert Krabsen skrev:

>
> Absolut en løsning. Men den dag sitet bliver en succes, så Frederik
> bliver nødt til at gruppere på de to første bogstaver, er det hurtigere
> simpelthen at ændre søgningen til
>
> "WHERE left(navn ,1)='Ni'"

Naturligvis

> "WHERE left(navn ,2)='Ni'"




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste