Avatar billede razmuz_dk Nybegynder
17. oktober 2004 - 01:11 Der er 17 kommentarer og
1 løsning

Du ligger nr. x på listen

Hejsa Eksperter

Jeg har en mysql database "brugere" med kolonnerne:
bruger_id,brugernavn,point

Point indeholder selvfølgelig et tal som fortæller hvor mange point en bruger har.

Kan jeg udfra et bruger_id nu fortælle hvor på "ranglisten" en bruger ligger? Som exp.dk gør det under "Dine data" (øverste til venstre i menuen), hvor der står Placering: x.

.. og hvordan?

-  Rasmus
Avatar billede human Nybegynder
17. oktober 2004 - 01:25 #1
Ja.. udskriv brugernavnet som du normalt ville det. I din sql query, sortere du dem så bare efter DESC
Avatar billede human Nybegynder
17. oktober 2004 - 01:25 #2
fx SELECT brugernavn,poing FORM tbl SORT BY DESC
Avatar billede human Nybegynder
17. oktober 2004 - 01:27 #3
sludder og vrøvl, tror vist jeg har leget med C for meget.

Det er self
fx SELECT brugernavn,poing FORM tbl ORDER BY poing DESC
Avatar billede baitianlong Nybegynder
17. oktober 2004 - 01:48 #4
Du får lige en PHP løsning, håber du bruger PHP:

function hentPosition($brugernavn) {
  mysql_connect("localhost", "user", "pass");
  mysql_select_db("database");
  $result = mysql_query("SELECT * FROM brugere ORDER BY point DESC");
  $pos = 0;
  while($row = mysql_fetch_row($result) && $row['brugernavn'] != $brugernavn) {
      $pos++;
  }
  return $pos;
  mysql_close();
}

<html>
<body>
Hejsa Hans, du er nummer <?= hentPosition("Hans"); ?> Her i systemet :)
</body>
</html>
Avatar billede human Nybegynder
17. oktober 2004 - 01:59 #5
legende.dk, hvorfor SELECT *, når han kun skal bruge brugernavn og poing?
Spild af resurcer
Avatar billede baitianlong Nybegynder
17. oktober 2004 - 02:05 #6
Nårh, men hvis det kan gøre dig glad så:
SELECT brugernavn, poing(point) FROM brugere ORDER BY point DESC

Den skal alligevel hente i hver tupel, så jeg tror ikke det har den store ændrede effekt !
Avatar billede baitianlong Nybegynder
17. oktober 2004 - 02:08 #7
...eller endnu bedre (i mit eksempel, og vel generelt):

$result = mysql_query("SELECT brugernavn FROM brugere ORDER BY point DESC");
Avatar billede razmuz_dk Nybegynder
17. oktober 2004 - 18:39 #8
Ja sådan ved jeg godt man kan gøre, men det er jo langt fra optimalt. Det forholder sig sådan at jeg har ca. 5000 brugere. Med andre ord selecter jeres eksempel jo 5000 rækker hvilket er ufedt. Og hvis brugeren man selecter ligger nederst på listen står jeg med en while med der kører 5000 gange, hvilket heller ik er sundt - performancemæssigt.

Men det kunne i jo ikke vide, fordi det skrev jeg jo ikke noget om men ... havde forestillet mig at der fandtes en anden metode?

Det kan ikke passe at exp.dk selecter brugernavne/brugerid'er på samtlige brugere på eksperten hver gang siden loades som det er tilfældet i jeres eksempler.
Avatar billede human Nybegynder
17. oktober 2004 - 20:17 #9
I følge exp's regler har vi svaret på dit spg, og du SKAL acceptere.

Men hvis du ved hvilken bruger det er du vil vfinde, så går jeg udfra du på en måde sender bruger id eller brugernanvn via URL'en, korrekt?

Så bruger du da bare $_GET['bruger_id'] i din sql, tjekker hvor det brugernavn findes i db' og tjekker så hans poing!

Andre muligheder er der ikke.

fx
SELECT bruger_id FROM tbl WHERE bruger_id='.$_GET['bruger_id'].'blabla...
Avatar billede baitianlong Nybegynder
17. oktober 2004 - 20:22 #10
Det får han s.. da ikke placeringen efter points ud af ?!?

Hvorfor hente noget man allerede har ?!?

SELECT bruger_id FROM tbl WHERE bruger_id='.$_GET['bruger_id'].

*lol* :P
Avatar billede human Nybegynder
17. oktober 2004 - 20:27 #11
Det gør du sq da! gad bare ikke skrive resten færdig, regnede ikke med du var helt grøn.

acceptere du ikke en af vores svar bliver du anmeldt til exp.dk

For der ER svaret på dit spg.
Avatar billede exp Juniormester
17. oktober 2004 - 22:00 #12
human >>
Hvorfor har du så travlt med at få lukket dette spørgsmål?

Der står ikke nogen steder i reglerne, at der SKAL accepteres svar i et spørgsmål (selvom vi alle selvfølgelig helst ser dette, og jeg skal da også opfordre til at dette spørgsmål lukkes NÅR DER ER TILFRESSTILLENDE SVAR ;-)

razmuz_dk skriver i sin kommentar 17/10-2004 18:39:06, at han ikke kan forestille sig, at legende.dk's kodeforslag er det bedste der er - jeg ser ingen grund til at razmuz_dk ikke skulle have lov til at se om der kommer andre brugere på banen med andre forslag.

exp/coadmin



razmuz_dk >>
Du kan evt prøve at kigge lidt på disse funktioner, det kan muligvis hjælpe dig lidt:
http://dev.mysql.com/doc/mysql/en/mysql_row_tell.html
http://dev.mysql.com/doc/mysql/en/mysql_row_seek.html
http://dev.mysql.com/doc/mysql/en/mysql_data_seek.html
Men jeg er ikke sikker ;-)

exp/bruger
Avatar billede human Nybegynder
17. oktober 2004 - 22:50 #13
Der står i reglerne man skal give svar for korrekt svar..

Der er givet korrekt svar.

Så kunne han oprette et nyt spg, hvor han uddyber det mere.

Har selv været udsat for af en coadmin at jeg skulle acceptere et svar, selvom det ikke var det jeg mente der blev svaret på.

Ergo skal der gives poing, formentlig til lengende.dk, da han kom med det mest præsice svar.
Avatar billede exp Juniormester
17. oktober 2004 - 23:08 #14
human >>
Vil du venligst vise mig hvor det står?
Jeg går selvfølgelig ud fra, vi snakker om ekspertens officielle regelsæt:
www.eksperten.dk/regler.phtml

Husk også, at der er forskel på at afvise et korrekt svar og tage point selv, fremfor ikke at acceptere et svar overhovedet.

Så snart to brugere har deltaget i besvarelsen af et spørgsmål, er det ikke automatisk lukket for at andre brugere kan tilføje deres syn på sagen. Ligesom 19 timers besvarelsestid heller ikke er urealistisk, slet ikke i weekenden.
Har du overvejet, om der eventuelt kunne komme flere brugbare svar i den kommende uge, når folk er tilbage på studier, arbejdspladser etc?

Og hvis legende.dk har supertravlt med at få sit svar accepteret, er jeg sikker på han godt selv kan råbe op...

Det jeg egentlig vil frem til, er at der ikke er nogen grund til at du leger politimand med sådan et agressivt sprogbrug.
Du bedes venligst acceptere dette.

exp/coadmin
Avatar billede baitianlong Nybegynder
17. oktober 2004 - 23:13 #15
Jeg tror nemlig at der findes en SQL løsning, som spørgeren ønsker... Vi skal bare lige have de hårde SQL-helte til at kigge forbi :)
Avatar billede human Nybegynder
17. oktober 2004 - 23:45 #16
Okay.. men hvis det ikke er sådan, så kan jeg vel få fyret den admin som sagde jeg skulle acceptere svaret på mit spg., korrekt?

Ellers giver exp.dk endnu mindre mening end det allerede gør.
Avatar billede fcs Novice
18. oktober 2004 - 07:57 #17
Human>> Kom med et link til den sag du henviser til - det andet fører ihvertfald ikke til noget.

Hygge

FCS
Avatar billede majkat Nybegynder
18. oktober 2004 - 11:55 #18
DROP TEMPORARY TABLE IF EXISTS tmp_

SET @c:=0

CREATE TEMPORARY table tmp_
  SELECT bruger_id, @c:=@c+1 AS pos
  FROM brugere
  ORDER BY point DESC

SELECT pos
FROM tmp_
WHERE bruger_id='$id'

DROP TEMPORARY TABLE tmp_

Hvis du bruger v. 4.1 eller derover kan du selvfølgelig gøre tingene en anelse enklere:

SET @c:=0

SELECT pos
FROM (SELECT bruger_id, @c:=@c+1 AS pos
      FROM brugere
      ORDER BY point DESC) as tmp_
WHERE bruger_id='$id'

I begge tilfælde vil MySQL arbejde med alle 5,000 rækker - men det slipper du aldrig for. Til gengæld er der kun een værdi der sendes mellem MySQL og din applikation.
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