Мне нужен совет.
У меня есть простой цикл.
И у меня есть стол участников. У каждого участника есть общий столбец [celkem].
Эти данные за исключением цикла
И мне это нужно, когда у вас также есть две точки, чтобы они всегда были в пределах досягаемости (см. Рисунок)
Остальная часть выдержки примерно такая: $ row [‘name’]; $ row [‘bodycelkem’]
Мой вопрос, как использовать PHP и MySQL дамп этого диапазона диапазона?
Редактировать:
SQLFiddler
(Мне нужно авто ранг, где точка в диапазоне)
Поскольку Poradi
Информация не существует, вам нужно экстраполировать ее. Вы можете сделать это с переменными. Смотрите мой SQL ниже или в SQLFiddle
SELECT `range`, jmeno, rangeData.celkem FROM `hraci`
LEFT JOIN (
SELECT
a1.*,
if( range_start = range_end,
range_start, CONCAT(range_start,", - ",range_end)
) `range`
FROM (
SELECT
q1.*,
(@runtot + 1) AS range_start,
(@runtot := @runtot + q1.num) range_end
FROM (
SELECT @rn:=@rn+1 rank, t1.num, t1.celkem FROM (
SELECT celkem, count(celkem) num FROM hraci GROUP BY celkem ORDER BY celkem DESC
) t1, (SELECT @rn:=0) t2
) q1, (SELECT @runtot:=0) q2
) a1
) rangeData ON hraci.`celkem` = rangeData.`celkem`
Как это работает?
Вот одна идея
DROP TABLE IF EXISTS hraci;
CREATE TABLE hraci (
jmeno VARCHAR(45) NULL,
celkem DOUBLE NULL)
ENGINE = InnoDB;
INSERT INTO hraci
(jmeno, celkem) VALUES
('Dan', 97.5),
('Adam', 97.2),
('Petr', 90.5),
('Pavel', 90.5),
('Michal', 87.3),
('Jan', 87.3),
('David', 87.3),
('Tomás', 87.3),
('Jarda', 85.2);
SELECT a.celkem
, a.jmeno
, CASE WHEN MIN(b.rank)-1 <> a.rank THEN CONCAT(a.rank,' - ',MIN(b.rank) - 1) ELSE a.rank END rank
FROM
( SELECT celkem
, jmeno
, FIND_IN_SET(celkem,celkems) rank
FROM hraci
CROSS
JOIN
( SELECT GROUP_CONCAT( celkem ORDER BY celkem DESC) celkems
FROM hraci
) x
) a
LEFT JOIN
( SELECT celkem
, jmeno
, FIND_IN_SET(celkem,celkems) rank
FROM hraci
CROSS
JOIN
( SELECT GROUP_CONCAT( celkem ORDER BY celkem DESC) celkems
FROM hraci
) y
) b
ON b.rank > a.rank
GROUP BY a.celkem,a.jmeno;
+--------+--------+-------+
| celkem | jmeno | rank |
+--------+--------+-------+
| 85.2 | Jarda | 9 |
| 87.3 | David | 5 - 8 |
| 87.3 | Jan | 5 - 8 |
| 87.3 | Michal | 5 - 8 |
| 87.3 | Tomás | 5 - 8 |
| 90.5 | Pavel | 3 - 4 |
| 90.5 | Petr | 3 - 4 |
| 97.2 | Adam | 2 |
| 97.5 | Dan | 1 |
+--------+--------+-------+