Diskuze: Řazení dat v SQL tabulce podle 2 sloupců a následný update tabulky
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
A k čemu ti to setříděné bude? Předpokládám, že to pak budeš vracet
klientům a opět to budeš třídit.
Možná by bylo lepší si to setříděné načíst (podle tvého selectu) a
držet v cache na serveru třeba 10-15 minut. Po té době to zahodit a znova
setříděné načíst.
Případně to můžeš zahodit v okamžiku kdy aktualizuješ skore, ale min
po10-15 minutách.
Ještě se zamysli zda je bezpodmínečně nutné vždy zobrazovat aktuální seznam, třeba ti to s prodlevou 10-15 minut bude stačit. Bude se to tak často měnit? Nebude ti to moc zatěžovat server?...
No setřídit to chci, protože pak budu jednoduše vracet row_id jako pořadí. Kdo je první kdo druhý atd. Potřebuji ale, ale kdykoliv se někdo dostane do prvních XX záznamů, tak aby další uživatelé měli tento záznam reatime.
V noci jsem nespat a vytvořil jsme malinko odlišný dotaz, který je přesně to, co potřebuji.
ALTER TABLE WorldHighScore
ORDER BY highlevel
DESC,
highday
ASC
A moje idea je, že bych to spustil triggerem after insert, jenže to mi hází error. SQL dotaz funguje, proč ho tedy nemohu vložit do triggeru?
Pokoušel jsme se volat tento dotaz i z PHP ( $sql = "ALTER TABLE
WorldHighScore
ORDER BY highlevel
DESC,
highday
ASC";
Ale to mi také nefungovalo
Ahoj, tak vlákno se dá uzavřít. Nakonec jsme to udělal tedy tak že při zapisování hodnot z PHP si tam posílám i SQL dotaz na zatřídění:
$query = "ALTER TABLE WorldHighScore
ORDER BY
highlevel
DESC, highday
ASC";
$query2 = "INSERT INTO WorldHighScore (highlevel, highday, highname) VALUES
('$highlevel', '$highday', '$highname')";
$result = mysqli_query($dbc, $query2);
$result = mysqli_query($dbc, $query);
Kupodivu to funguje
No, nejsem si zrovna jistý, že toto řešení je ideální. Já bych asi spíš vytvořil nějaké view, kde by se ty hodnoty řadily podle tvé potřeby. Měnit tabulku při každé změně nějakého mi nepřijde správné řešení ani programově a možná ani výkonově...
Viz Barbora. View ma smysl, pokud mas na to hw architekturu, ktera uklada
view do rychleho hw, treba velmi velke pameti nebo velmi rychleho disku.
To, co potrebujes, tez Barbora, lze resit tak SELECTEM, ktery pouzivas. Bud a
nebo dvoji select. Poradi si tam preci muzes pridat pres COUNT(*)
SELECT
`highlevel`,
`highscore`,
`highname`,
COUNT(*) AS `poradi`
FROM
`WorldHighScore`
ORDER BY
`highlevel` DESC,
`highscore` ASC
LIMIT 0 , 100
Zobrazeno 7 zpráv z 7.