webForumDet fria alternativet

A -> A i begynnelsebokstav, B, C, osv.

ASP

13 svar · 408 visningar · startad av koltrasten

Medlem sedan okt. 2002272 inlägg
Frågan#1

I en mySQL-databas ligger medlemsnamn i kolumnen Anvandarnamn.
Istället för att lista upp alla rakt upp och ner skulle jag vilja ha så att om man klickar på A kommer alla medlemmar som har A i förstabokstaven fram. Klickar man på 1 kommer alla medlemmar som har 1 i förstabokstaven fram. Och det hela visas med 80 medlemmar per sida.

Har ni någon tips på hur man fixar en sådan sida?

Tillägg: Precis som här på webForum - om man klicka på Medlemmar

Medlem sedan feb. 200112 078 inlägg
#2
<a href="sida.asp?letter=A">A</a>
letter = request("letter")

SQL = "SELECT * FROM users WHERE left(username,1) = '" & letter & "' ORDER BY username"
Medlem sedan juni 200032 967 inlägg
#3

Jag hade nog använt mig av LIKE istället, dessutom fungerar det i alla dbms. (nåja. ;) )

letter = request("letter")

SQL = "SELECT * FROM users WHERE username LIKE '" & letter & "%' ORDER BY username"

Mvh,

Medlem sedan feb. 200112 078 inlägg
#4

Redigerat) Läste slarvigt. :l

Funkar inte SUBSTRING eller LEFT i mySQL? ;)

Medlem sedan dec. 20003 887 inlägg
#5

Problemet med LIKE blir väl att wildcard:et % inte gäller för alla DBMS...

Left() finns väl för mySQL om jag inte kommer ihåg fel?

Medlem sedan okt. 2002272 inlägg
#6

Tack! Jag valde LIKE - det funkade.

Är det stor skillnad mellan de båda - prestandamässigt?

Medlem sedan okt. 2002272 inlägg
#7

Jag kom på en fråga till. Om jag vill ha en knapp där det står 0-9 och där alla medlemmar som börjar på 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 visas. Vad skall man skriva för att få detta? Är det bara något som kan läggas till i querystringen?

Medlem sedan okt. 2002272 inlägg
#8

Jag har funderat och kodat en stund.
Så vitt jag kan se det är den enda lösningen att göra är att ha en IF-sats. Alltså

If Request.QueryString("letter") = "1" OR Request.QueryString("letter") = "2" [i]osv[/i] Then
SQL = "SELECT * FROM users WHERE username LIKE '0%' OR username LIKE '1%' [i]osv[/i] ORDER BY username"

Är det den enklaste lösningen?

Medlem sedan nov. 20017 144 inlägg
#9

citat: Är det den enklaste lösningen?

Nej, den ser ju jättekrånglig ut.

Medlem sedan dec. 200012 464 inlägg
#10
If Request.QueryString("letter") >= "0" and  _
Request.QueryString("letter") <=  "9" Then
SQL = "SELECT * FROM users WHERE substring(username from 1 for 1) between '0' and '9' ORDER BY username"
Medlem sedan nov. 20017 144 inlägg
#11

Inte för att det blir så mycke mindre men det kan ju vara en idé:

if startletter = "nonalphabet" then
  sql = "SELECT username FROM users WHERE username Not Like 'a%'"
for alphabet = 98 to 122
sql = sql & " AND username Not Like '" & chr(alphabet) & "%'"
next
  sql = sql & " ORDER BY username"
else
sql = "SELECT username FROM users WHERE username Like '" & startletter & "%' ORDER BY username"
end if
Medlem sedan nov. 20017 144 inlägg
#12

Ha, ha ja du ser, det var bara ett lådsasförsök.

Medlem sedan okt. 2002272 inlägg
#13

Jespers kod förstod jag inte riktigt, men Lasses kod funkade utmärkt!

Medlem sedan nov. 20017 144 inlägg
#14

koltrasten skrev:

Jespers kod förstod jag inte riktigt, men Lasses kod funkade utmärkt!

Du skall, du måste, du är tvingad att använda LarsG´s kod!!!!! ;)

262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)