Diskuze: Update the rank position in a MySQL Table
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
???
SELECT id, body, COUNT(*) AS rank
FROM tabulka
ORDER BY BODY DESC
To ti vypise celou tabulku se spravnym rankem a ted to potrebujes jen
zapsat.
google = select update sql -> https://stackoverflow.com/…n-sql-server
UPDATE table
SET Col1 = i.Col1,
Col2 = i.Col2
FROM (
SELECT ID, Col1, Col2
FROM other_table) i
WHERE
i.ID = table.ID
Ahoj, trochu to zavání chybou v návrhu. Jednotlivé sloupce by měly být závislé pouze na primárním klíči, nikoliv sami na sobě. Lepší by možná bylo rank zjišťovat vždy při selectu.
Pokud však má toto řešení nějaký hlubší důvod, je samozřejmě možné napsat dotaz, který hodnoty opraví. Bude však nutností použít pokročilejší konstrukci SQL.
CREATE PROCEDURE renew_ranks()
BEGIN
DECLARE v_id INT;
DECLARE v_points INT;
DECLARE v_actual_rank INT DEFAULT 1;
DECLARE v_done BOOLEAN DEFAULT false;
DECLARE c_tableItems CURSOR FOR
SELECT id, points
FROM table
ORDER BY points DESC;
DECLARE HANDLER FOR NOT FOUND
SET v_done = true;
OPEN c_tableItems;
read: LOOP
FETCH c_tableItems INTO v_id, v_points;
IF v_done THEN
LEAVE read;
END IF;
UPDATE table
SET rank = v_actual_rank
WHERE id = v_id;
SET v_actual_rank = v_actual_rank + 1;
END LOOP;
END
Je to psané na telefonu, takže neručím za funkčnost. Případně ještě napiš.
Zobrazeno 3 zpráv z 3.