Avatar billede madeindk Nybegynder
29. maj 2007 - 01:44 Der er 6 kommentarer og
1 løsning

Vælge seneste post - evt. i JOIN handling

Hej eksperter! Jeg sidder i øjeblikket og roder lidt med et vennesystem på mit site, og nu kunne jeg godt tænke mig at hive ud hvornår brugeren sidst har været logget ind, det kan jeg også sagtens gøre via en ny SQL sætning, men nu kunne jeg godt tænke mig at vide om det kan gøres i selve SQL sætningen.

Lige nu ser det sådan her ud:
SQL = "SELECT a.id, a.friendID, b.username, b.online, b.kon, b.birthday, picture_add, picture_validate FROM users_friends a INNER JOIN users b ON a.friendID = b.ID WHERE a.userID=" & Request.QueryString("ID") & " AND a.status = 2 ORDER BY b.online DESC LIMIT " & intStart & ", " & intPageSize & ""

Det funger også fint, men hvordan hiver jeg brugerens seneste login ud sammen med det? Tabellen hedder 'users_loginfo' og skal joine på b.ID = users.loginfo.userID (hvis det kan laves i en JOIN sætning) - det håber jeg det kan, det vil gøre det meget hurtigere at hive ud :)
Avatar billede Slettet bruger
29. maj 2007 - 07:51 #1
Det kan sagtens lade sig gøre, men før vi går dertil, så lad mig lige advare dig om, at med mindre du allerede har kontrolleret, at Request.QueryString("ID") indeholder noget passende, et det enormt farligt at bruge den slags direkte i sin SQL-streng. Normal god skik er at behandle (og kontrollere) den slags først og lægge de gyldige værdier i nye variable, således at man på intet tidspunkt er i tvivl om hvorvidt man arbejder direkte med input eller med kontrolleret data.

SQL = "
  SELECT a.id, a.friendID,
    b.username, b.online, b.kon, b.birthday, picture_add, picture_validate
  FROM users_friends a
  INNER JOIN users b ON a.friendID = b.ID
  INNER JOIN users_loginfo c ON a.friendID = c.userID
  WHERE a.userID=" & Request.QueryString("ID") & "
    AND a.status = 2
  ORDER BY b.online DESC LIMIT " & intStart & ", " & intPageSize & ""

Jeg brugte her bare en normal inner join, men hvis du kan risikere, at der er venner på listen, der ikke har en række i users_loginfo-tabellen, så skal du ændre fra INNER til LEFT OUTER
Avatar billede madeindk Nybegynder
29. maj 2007 - 11:59 #2
Tak for budet, men det der kunne jeg jo nem ha' lavet selv. Måske har jeg ikke informeret dig ordentligt men en bruger kan nemt ha RIGTIG mange poster i 'users_loginfo' tabellen. Der bliver tilføjet en hver gang man logger ind og derfor er det også vigtigt den vælge den nyeste post.
Avatar billede madeindk Nybegynder
29. maj 2007 - 12:03 #3
Men selvfølgelig tjekker jeg op på ID'et, man når slet ikke at komme til den kode hvis Request.QueryString("ID") ikke er et gyldigt tal.
Avatar billede madeindk Nybegynder
29. maj 2007 - 15:30 #4
Fandt anden løsning - http://www.eksperten.dk/spm/780712
Avatar billede Slettet bruger
29. maj 2007 - 21:05 #5
Tjah, det var jo absolut umuligt at vide uden den ekstra oplysning, du gav i det andet spørgsmål. Må jeg forresten lige henlede din opmærksomhed på reglerne for eksperten. Jeg tænker på 2.1.11, som siger at man ikke må oprette samme spørgsmål flere gange.
Avatar billede madeindk Nybegynder
30. maj 2007 - 17:35 #6
Hej igen sandbox, jeg kender skam godt reglerne her på Eksperten, har været bruger længe. Men jeg kom i tanke om i går det nok ville være smartest at oprette et spørgsmål i ASP kategorien, da jeg tænkte det måske krævet en anelse forstand på ASP for at kunne løse mit problem.

Men som du kan se i spørgsmålet (Ref: http://www.eksperten.dk/spm/780712) brugte jeg slet ikke fennec's løsning - det tog for langtid pga. de 35-36.000 poster der ligger i tabellen.
Avatar billede Slettet bruger
30. maj 2007 - 22:02 #7
Hvis man mener, at man er kommet til at oprette sit spørgsmål i en forkert kategori, er den korrekte måde at håndtere det, at man først lukker det forkerte sted og så opretter det andet sted. Men bare rolig, jeg anså det for en simpel bommert, og har ikke anmeldt det.

Og i dette tilfælde var det nok ikke så ASP-specifikt at det nødvendigvis burde høre til der, men det vil jo altid være et vurderingsspørgsmål, når man laver noget, der kan være i forskellige kategorier. Selv om jeg aldrig har brugt ASP eller VB havde jeg i alt fald ingen problem med at pille det SQL-specifikke ud fra VB.ASPs strengsyntaks.
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