В нижнем sql я пытаюсь увеличить ранг на основе столбца perCent. Дело здесь в том, что ранг должен оставаться тем же, когда подобный счет найден.Приращение MySql или нет на основе предыдущего значения
select id, perCent,
@curRank := if(parent = @prevParent and perCent != @prevPerCent , @curRank + 1, 1) AS rank,
@prevParent := parent, @prevPerCent := perCent
from (
select child.id, child.perCent, child.parent
from likesd parent
join likesd child
on parent.id = child.parent
where parent.type = 3
order by parent.id, child.perCent desc) x
cross join (SELECT @curRank := 0, @prevParent := null, @prevPerCent := null) r
Например: 50 ранг 1, 30 ранг 2, 30 снова ранг 2, 20 является рангом 3. Идея заключается в том, чтобы не увеличивать, когда подобный ранг найден.
Как это сделать? Как я могу сказать MySql в инструкции if
, чтобы не увеличивать его?
Основная логика
if parent = @prevParent, if perCent = @prevPerCent
// Dont increment
else
increment
я застрял с этой частью в MySql. Вы можете помочь?
Главная Таблица
"id" "type" "parent" "country" "votes" "perCent"
"24" "1" "1" "US" "35" "0"
"25" "3" "24" "US" "35" "0"
"26" "10" "25" "US" "15" "50.00"
"27" "10" "25" "US" "10" "33.33"
"28" "10" "25" "US" "10" "33.33"
"29" "1" "1" "US" "50" "0"
"30" "3" "29" "US" "50" "0"
"31" "10" "30" "US" "20" "40.00"
"32" "10" "30" "US" "15" "25.00"
"33" "10" "30" "US" "15" "35.00"
Ожидаемые результаты:
"id" "perCent" "rank"
"26" "50.00" "1"
"27" "33.33" "2"
"28" "33.33" "2" // No increment in rank if the perCent is same as above
"31" "40.00" "1" // Continious incrementing here. PerCents differ.
"33" "35.00" "2"
"32" "25.00" "3"
Некоторые больше усилий, которые не работают (! Тьфу Сдаюсь)
select id, perCent,
@curRank := if(parent = @prevParent, TRUE, FALSE) AS rank,
@curCent := if(perCent = @prevCent, FALSE, TRUE) AS cent,
@curRank := if(@curRank and @curCent, @curRank + 1,'No Inc') AS k,
@prevParent := parent, @prevCent := perCent
from (
select child.id, child.perCent, child.parent
from likesd parent
join likesd child
on parent.id = child.parent
where parent.type = 3
order by parent.id, child.perCent desc) x
cross join (SELECT @curRank := 0, @prevParent := null, @prevCent := null) r
скрипкой работает хорошо, но вы знаете, почему я получаю '/ * SQL Error (1054): Неизвестный столбец«ранг»в«списке поля»* /', когда я испытываю на мой локальная машина? В скрипке тоже нет, но это хорошо работает. – jmenezes
Хорошо. Все работает красиво. Я скопировал код со скрипки. Это работает отлично. Спасибо за помощь в этом. Хотел бы я закодировать, как ты. Когда я выясню, как это сделать, я награду за это. – jmenezes
Ах, извините, я обернул внутренний SQL во внешнем SQL и забыл добавить имя столбца во внутренний SQL в указанной выше версии - теперь добавлен. Честно говоря, вы сделали все умные вещи выше - я просто немного подстроил/поменял '' '' '' '' '' '' '' заявления'. Удачи вам в этом. – JohnLBevan