webForumDet fria alternativet

loop i loop? :-/

PHP

8 svar · 205 visningar · startad av HDJHSKGDKJHSD

Medlem sedan sep. 2001147 inlägg
Frågan#1

hej..

Om man har en mysql-databas med massa användarnamn, och vill lista dem som är online (finns en online tabell också) hur gör man det smidigast och snabbast?
(prestandamässigt sett d.v.s)

Är det att loopa igenom varje användarnamn och kolla i online-listan?

tack i förväg.

Medlem sedan juni 20008 205 inlägg
#2

Nej, det skulle sannolikt vara det sämsta alternativet. En join av tabellerna torde vara det bästa...
SELECT u.name FROM users u, online o WHERE u.id = o.id

------------------
You can be a coward for a few minutes, or dead forever. /Rincewind

[Redigerat av spango den 08 dec 2001]

Medlem sedan sep. 2001147 inlägg
#3

hej, tack för svaret

jag sökte lite på mysql sidan men hittade inte nånting direkt begripligt, kan du / nån annan bara beskriva lite hur just den där kodsnutten funkar?

tack!

Medlem sedan sep. 2001147 inlägg
#4

för att vara totaljobbig...

vad menas med u och o ? :)

kan du förklara steg för steg?
tackar!

Medlem sedan mars 20007 896 inlägg
#5
SELECT u.name FROM Users AS u, Online AS o WHERE o.online = 'online' AND u.id = o.id

Hämtar alla usernames från tabellen Users ( sätter Userse till salias u ) där alla Onbline-id,. strämmer översems med Users-id.

u och o är alias för Users och Online, för att göra SQL-satsen kortare.

------------------
SPiN, bjorne.w@telia.com

-- En ask vet jag stånda - den Yggdrasil heter, ett väldigt träd överöst av vita sanden. --

Medlem sedan sep. 2001147 inlägg
#6

Hej igen!

Hur ska detta lösas om "online" tabellen ligger i en annan databas? :)

användar databasen heter "leet_user" och tabellen med användare heter "main", sen ligger "online" tabellen i "leet_chat" databasen..

Det som ska jämföras mellan dessa är ett fält vid namn "uid" i "main" och "w_uid" i "online".

Online-listan ar dock lite "speciellt", för det finns flera records med samma uid (p.g.a uppdateringsautomatiken)..

om det hjälper sa hämtar jag online-listan så här:

SELECT * FROM online GROUP BY w_uid ORDER BY w_username

hoppas det går att fixa! tack! :)

Medlem sedan sep. 2001147 inlägg
#7

Om det är ett problem att "uid" fältet ska jämföras med "w_uid" i andra databasen/tabellen så kan jag ändra så det blir "uid" i båda databaserna/tabellerna..

Ska bara skriva om 5 sidor isåfall :)

Medlem sedan sep. 2001147 inlägg
#8

:o

Kan inte ens LarsG svara på detta? ;)

Medlem sedan sep. 2001147 inlägg
#9

Nu känns det som om det är 23231123:e gången jag svarar på mitt egna inlägg ;)

men!
Kan någon bara lite vänligt tipsa om vilken funktion/anrop som bör användas till detta?

eller ska jag köra med "loopar i loopen" ?

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