Toplista készítése max eredmény és legkisebb idő szerint
2016-07-11T15:40:28+02:00
2016-07-12T14:34:16+02:00
2022-08-10T06:00:29+02:00
guard
Toplistát szeretnék készíteni, ahol listázódnak a játékosok az elért eredményük alapján, de ahol holtverseny van, ott a teljesítés ideje döntene. Két adattáblám van.

JATEK_SESSION
-----------------
azonosito : INT
start : INT
vege : INT
jatekos_azonosito : INT
eredmeny : INT

JATEK_EREDMENYEK
-----------------------
azonosito : INT
jatekos_neve : VARCHAR
eredmeny : INT
session_azonosito : INT (külső kulcs a másik táblához)

(Igen, az eredmény sajnos mindkettőben tárolódik. Ami nem kell, ki fogom gyomlálni.)
A lekérdezésem most így néz ki:

SELECT jatek_eredmenyek.jatekos_neve, jatek_session.jatekos_azonosito, MAX( jatek_session.eredmeny ), jatek_session.vege-jatek_session.start AS teljesitesiido
FROM jatek_eredmenyek, jatek_session
WHERE jatek_eredmenyek.session_azonosito = jatek_session.azonosito
GROUP BY jatek_session.jatekos_azonosito
ORDER BY MAX( jatek_session.eredmeny ) DESC,
teljesitesiido ASC;

Viszont nem jó., mert az eredmények alapján rendben sorba állítja a játékosokat, és utána a teljesítési idő alapján is, de nem vizsgálja az adott játékos legjobb eredményéhez tartozó összes teljesítési időt.
Mit kellene változtatnom?
Köszönöm szépen előre is!
Mutasd a teljes hozzászólást!
Esetkeg így?

SELECT jatek_eredmenyek.jatekos_neve ,jatek_session.jatekos_azonosito ,MAX(jatek_session.eredmeny) ,MIN(jatek_session.vege - jatek_session.start) AS teljesitesiido, ,SUM(jatek_session.vege - jatek_session.start) AS teljesitesosszido FROM jatek_eredmenyek ,jatek_session WHERE jatek_eredmenyek.session_azonosito = jatek_session.azonosito GROUP BY jatek_session.jatekos_azonosito ORDER BY MAX(jatek_session.eredmeny) DESC ,teljesitesiido ASC;
Mutasd a teljes hozzászólást!

  • SELECT *,jatek_session.vege-jatek_session.start AS teljesitesiido FROM JATEK_EREDMENYEK LEFT JOIN JATEK_SESSION ON jatek_eredmenyek.session_azonosito = jatek_session.azonosito ORDER BY jatek_session.eredmeny DESC, teljesitesiido ASC
    Mutasd a teljes hozzászólást!
  • Esetkeg így?

    SELECT jatek_eredmenyek.jatekos_neve ,jatek_session.jatekos_azonosito ,MAX(jatek_session.eredmeny) ,MIN(jatek_session.vege - jatek_session.start) AS teljesitesiido, ,SUM(jatek_session.vege - jatek_session.start) AS teljesitesosszido FROM jatek_eredmenyek ,jatek_session WHERE jatek_eredmenyek.session_azonosito = jatek_session.azonosito GROUP BY jatek_session.jatekos_azonosito ORDER BY MAX(jatek_session.eredmeny) DESC ,teljesitesiido ASC;
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen, ez tényleg úgy listáz mindent, hogy figyelembe veszi az összes előfordulást, viszont egy játékos többször is szerepel a listában.
    Mutasd a teljes hozzászólást!
  • Ez az, működik! Nagyon szépen köszönöm a segítségedet!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd