Avatar billede mwm77 Nybegynder
09. maj 2007 - 03:29 Der er 18 kommentarer og
1 løsning

Positions system fra row count!

Jeg har en Table "account" i databasen og et field "userid" og et "hits" + flere. Jeg har 2 seperat php sider. Den ene php1 viser alle de userid der er i Databasen sorteret efter "hits". en lang række med en...

foreach ($number as $number) ; $number++;

1, 2, 3 osv... så den med højest hits ligger nummer 1. Hits og sortering ændre hele tiden og listen opdater ved refresh. Det virker fint. Den anden php2 fil er en bruger konto, hvor man kan se navn, hits, position m.m. Navn og hits m.m kan jeg henter fra databasen, men jeg har ingen position over brugeren.

1 eksempel:

Jeg er oprettet som "userid" 20 og jeg kan se på php1 at jeg ligger på 13 pladsen Pos:13 i $number++ rækken. Når jeg så logger over i php2 og min konto oplysninger kommer frem og jeg kun ser mine egen "hits" Så kan jeg ikke få lavet så der står Pos:13 der. Den vil skrive Pos:1 hvis jeg henter med $number, fordi scriptet kun viser et field.

Jeg har prøvet at lave et pos field og får nummeret fra $number formen ned..men der skriver den det sidst tal i rækken på alle kontoerne. Det skal være sådan at hvergang "hits" ændre sig så ændre Pos med.
Avatar billede mwm77 Nybegynder
09. maj 2007 - 05:47 #1
Et system nøjagtigt som placering systemet her på eksperten.dk. Den sorter os med brugernavn og efter point med flest point øverst. Skulle måske ha kaldt spørgsmålet for placerings system. Du kan se dine data oppe ved venstre hjørne. Der står din samlede placering, og det blive konstant updateret efter pointene tjent. Håber det gjore det lidt nemmere...

            Mvh...MWM
Avatar billede Slettet bruger
09. maj 2007 - 06:29 #2
Jeg forstår godt hvad du mener, og kan godt se dit problem.
Du vil vide hvad placering du er på, men ved ikke hvordan du skal hive det frem når du kun skal bruge din egen profils placering.

Jeg ved ikke engang hvordan man løser problemet, men jeg kigger selv med :P
Avatar billede plx Nybegynder
09. maj 2007 - 12:10 #3
måske med en subselect:

select *, (select count(*) from account where hits >= acc.hits) as pos from account as acc where userid=$id;
Avatar billede lesp Nybegynder
09. maj 2007 - 15:46 #4
Kan du ikke prøve at lægge koden ud så er det nemmere.
Avatar billede mwm77 Nybegynder
09. maj 2007 - 19:48 #5
Jeg har ikke noget kode til det, det eneste jeg har er den anden php side, med udtrækket fra Db der tilføjer en "foreach ($number as $number) ; $number++;" og gir tal rækken. Jeg har prøvet at updater $number i et Field i Db men den vil tag sidste tal i rækken den når til og indsæt på alle brugere.. Så jeg er åben for forslag. Jeg kan ikke lige få den subselect til at fungere, jeg forstår ikke lige helt den acc.hits, kan du prøve at skrive den i et lille script og lave et udtræk fra Db, så kan jeg måske bedre forstå..

                Mvh...MWM
Avatar billede plx Nybegynder
10. maj 2007 - 04:28 #6
hvilken mysql version bruger du? du skal have mindst 4.1 for at lave subselects

den ydre select fra account kalder jeg acc, for at kunne henvise til den inde fra subselecten.

select count(*) from account where hits >= acc.hits

tæl antallet af rækker, hvor hits er => hits fra den konto du er interesseret i
Avatar billede tjaz Nybegynder
10. maj 2007 - 09:05 #7
Om der er en måde at løse det på med sql er jeg ik klar over, men det her er en løsning.

$users = mysql_query("select * from account order by hits");

while($usr = mysql_fetch_array($users)) {
  $no++;
  if($usr[id]==$_GET[id]) { //eller hvordan du nu henter id på siden med brugerinfo
      echo "Din pos:". $no;
  }
}
Avatar billede mwm77 Nybegynder
10. maj 2007 - 15:56 #8
Hej tjaz.

Jeg har lige siddet inat og kigget på det over Google, og noglelunde det samme jeg er kommet frem til, men jeg kan stadig ikke få den til at vise det på den anden php side. Jeg kan lige lave et eks. Vi har 3 brugere:

Bruger1= id1, hits:10
Bruger2= id2, hits:30
Bruger3= id3, hits:20

Jeg har lavet en php side, hvor alle brugere bliver vist efter en ORDER by:

Pos1= Bruger2, hits:30
Pos2= Bruger3, hits:20
Pos3= Bruger1, hits:10

Så har jeg en anden side hvor f.eks Bruger3 logger ind og kun vedkommenes info skal vises:

Bruger3= Pos:2, hits:20

Jeg kan kun få den til at vise Pos:1 når jeg kun udtrækker en row, det virkede ellers som en forholdsvis simpel ting at lave med min php kunnen, men den har drillet mig længe nu, men nærmere os..lol..

              Mvh...MWM
Avatar billede danishmale Nybegynder
10. maj 2007 - 21:55 #9
$query = "SELECT COUNT( * ) AS Antal FROM account WHERE hits >= (SELECT hits FROM account WHERE userid=my_userid);"


Antal er din position
Avatar billede danishmale Nybegynder
10. maj 2007 - 22:09 #10
Hov glemte at skrive at my_userid er dit brugerid :-D
Avatar billede tjaz Nybegynder
13. maj 2007 - 20:14 #11
danishmale har fat i noget af det rigtige, men vil mene at den skal tælle dem som er <= med hits og ikke >=
Avatar billede mwm77 Nybegynder
15. maj 2007 - 20:45 #12
Hej.

I må først og fremmeste lige undskyld jeg først vender tilbage nu, men har været væk fra commen. Jeg har lige siddet og kigget på det, og har før set den kode med COUNT indopereret med i, men jeg har ikke lige haft held med at få til at lykkes efter dog kun få forsøg. Plejer der ikke at skal være en mysql-query, eller mysql_num_rows, mysql_fetch_row m.m eller sådan. Det kan være fordi jeg er helt smadret "træt", så det kan være jeg ikke kan se skoven for bar træer, så jeg kigger selv lige igen på det senere, men ellers velkommen til lige at guide...

      Mvh...MWM
Avatar billede mwm77 Nybegynder
17. maj 2007 - 20:54 #13
Hej igen.

Hvad er det jeg overser, jeg kan ikke få den SELECT COUNT til at virke. Håber du lige kan hjælpe mig med det, da jeg også tror at det er løsningen. På forhånd tak..

                      Mvh...MWM
Avatar billede plx Nybegynder
18. maj 2007 - 00:02 #14
Jeg spurgte tidligere hvilken mysql version du bruger. Det er ret vigtigt, når du forsøger dig med den type forespørgsler
Avatar billede danishmale Nybegynder
18. maj 2007 - 00:04 #15
$my_userid = 1111111111;

$query = "SELECT COUNT( * ) AS Antal FROM account WHERE hits >= (SELECT hits FROM account WHERE userid=".$my_userid.");";

$a_count = mysql_query($query) or die(mysql_error));

$count_result = mysql_fetch_assoc($a_count);

echo "Dit position er: ".$count_result['Antal'];
Avatar billede danishmale Nybegynder
18. maj 2007 - 00:12 #16
Skal lige pointeres .... jeg testede den query på Mysql 5, burde virker på de senere versioner af MySQL 4.1....
Avatar billede danishmale Nybegynder
18. maj 2007 - 00:17 #17
Alternativ forslag:

$my_userid = 1111111111;

$query = "SELECT hits FROM account WHERE userid=".$my_userid.";";

$a_count = mysql_query($query) or die(mysql_error));

$count_result = mysql_fetch_assoc($a_count);

$query = "SELECT COUNT( * ) AS Antal FROM account WHERE hits >=
".$count_result['hits'].";";

$a_count = mysql_query($query) or die(mysql_error));

$count_result = mysql_fetch_assoc($a_count);

echo "Din position er: ".$count_result['Antal'];
Avatar billede mwm77 Nybegynder
18. maj 2007 - 04:41 #18
Hej.

Ja så lykkedes det. perfekt. Tusind tak for hjælpen alle, jeg lader pointene gå til "danishmale" for det sidst stykke arbejd her, selvfølig lave en mysql_query og fetch under subselecten... Tak for det, og tak til alle jer andre og til tjaz for opmærksomheden...

            Mvh...MWM
Avatar billede Slettet bruger
19. maj 2007 - 23:28 #19
Synes udtrækket er meget langsomt.
Kan det passe plx?
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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