Rank positie

  • Hey,


    Ik heb een script wat wel werkt, maar niet precies zoals ik het wil.


    Hij rekent goed de positie uit van diegene. Maar omdat onder degene onder de eerste 6 allemaal 0 kracht hebben krijgen ze allemaal #6.
    Hoe kan ik zorgen dat dit gewoon doorloopt?


    PHP
    $result = mysql_query("SELECT COUNT(id)+1 AS positie FROM users WHERE kracht > (SELECT kracht FROM users WHERE id='".$list['id']."')") or die(mysql_error());
    	$row = mysql_fetch_array($result);


    MVg.
    Jeffrey

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Aangezien jij een dubble query draait om je position te bepalen is dat natuurlijk af en toe niet handig om dubble query's te draaien wat je hier nodig hebt is een variable die je een +1 count geeft met daarin een sub query die heel de tabel afdraait,


    wat je dan doet is dit:


    PHP
    SET @count = 0;
    
    
    SELECT @count := @count + 1 AS position,
            x.*
    FROM (
            SELECT *
            FROM users ORDER BY kracht DESC
     ) x


    hierdoor wordt de field position toegevoegd bij de result row en kan je gewoon lekker in php je foreach ($row = ...) draaien en gelijk $row['position'] $row['name'] doen :) je was op de goede wel met je sub query alleen niet goed toegepast.

  • Ik heb momenteel het volgende:


    PHP
    $result = mysql_query("SET @count = 0; SELECT @count := @count + 1 AS position, x.* FROM (SELECT * FROM users WHERE id = '".$list['id']."' ORDER BY kracht DESC) x") or die(mysql_error());
    	$row = mysql_fetch_array($result);


    Maar krijg de volgende error:

    PHP
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT @count := @count + 1 AS position, x.* FROM (SELECT * FROM users WHERE id ' at line 1
  • als je die query zonder je eigen query draait eerst is draait in phpmyadmin en daarna gaat aanpassen naar je php omgeving ga je snapen hoe en wat en je kan alsnog dan gewoon enters in je php gebruiken om meer dan alleen "line 1" te achter halen maar line 4 of 5 is wel wat makkelijker :)


    EDIT:
    waarom doe je een where id= in de sub query zetten wil je niet alle resultaten hebben?? Of hoe zie je dit?

  • Bedankt,


    Maar als ik:


    PHP
    SET @count = 0;
    
    
    SELECT @count := @count + 1 AS position,
            x.*
    FROM (
            SELECT *
            FROM users ORDER BY kracht DESC
     ) x


    invoer in phpmyadmin krijg ik netjes een lijst met volgorde.
    Alleen als ik dan WHERE id = '7' of WHERE id = '25' gebruik. Komen ze allemaal op position 1 ..


    Sorry ik heb hier nog nooit eerder mee gewerkt..


  • als ik deze in mijn eigen pma draai doet hij het wel? Is je $list['id'] al een int? want dan hoeven de '' ook niet


    Uiteraard komt er dan wel uit position 1 uit

  • Ik zal het op een andere manier doen, bepaal alle posities van de gebruikers en selecteer dan de positie van de huidige gebruiker.


    PHP
    SELECT u.id,
           (SELECT COUNT(*)
              FROM users
             WHERE users.kracht >= u.kracht) AS position,
           u.kracht
      FROM users u
     WHERE u.id = '7'


    Dit stukje zorgt ervoor dat hij alle posities per user bepaald en daarna de specifieke user bepaald. En het zal je een unieke positie geven ook wanneer ze gelijk staan.


    Wanneer jouw id hoger is dan een ander en je kracht staat gelijk dan zal hij jou erboven zetten, dit is natuurlijk oneerlijk dus zal je hier nog is naar moeten kijken. Dit is altijd handig om te bepalen met geld etc erbij. ( Hierbij denk ik gelijk terug naar de tijd van crimeclub, goeie ouwe tijd! )

    School
    Tweedejaars Informatica Student @ Hogeschool Rotterdam.


    Webtalen
    - PHP ( OOP )
    - SQL
    - JavaScript i.c.m. jQuery framework
    - (x)HTML
    - CSS
    - Actionscript
    - XML


    Programmeertalen
    - Java
    - C#
    - Ruby i.c.m. on Rails framework

  • Oke is je level een int met 1 2 3 4 5 nummering of hoe zit deze in elkaar?


    Je kan deze gewoon in je WHERE erbij te doen. ;)

    School
    Tweedejaars Informatica Student @ Hogeschool Rotterdam.


    Webtalen
    - PHP ( OOP )
    - SQL
    - JavaScript i.c.m. jQuery framework
    - (x)HTML
    - CSS
    - Actionscript
    - XML


    Programmeertalen
    - Java
    - C#
    - Ruby i.c.m. on Rails framework

  • Ik kom zometeen even met een update ! ;)


    Edit:
    Hieronder een verbeterde versie van Patrick. Hij leest nu alle posities per user uit.


    En hieronder per user:


    Wil je dat ik die level ook nog erbij doe of kan je dit zelf?


    Edit:
    Wanneer je naast kracht ook op level sorteert dan kan je positie bepalen wanneer de kracht gelijk staat.



    En dit is per user:

    School
    Tweedejaars Informatica Student @ Hogeschool Rotterdam.


    Webtalen
    - PHP ( OOP )
    - SQL
    - JavaScript i.c.m. jQuery framework
    - (x)HTML
    - CSS
    - Actionscript
    - XML


    Programmeertalen
    - Java
    - C#
    - Ruby i.c.m. on Rails framework

  • Zie mijn laatste edit in mijn post! ;)


    Edit:
    De where ook nog even toepast met level!

    School
    Tweedejaars Informatica Student @ Hogeschool Rotterdam.


    Webtalen
    - PHP ( OOP )
    - SQL
    - JavaScript i.c.m. jQuery framework
    - (x)HTML
    - CSS
    - Actionscript
    - XML


    Programmeertalen
    - Java
    - C#
    - Ruby i.c.m. on Rails framework

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!