Я выполняю следующие запросы в SQL.
SET @thisid=0;
SET @serial=0;
SELECT @serial := IF((@thisid != `places`.`id`), @serial + 1, @serial) as `serial`, @thisid := `places`.`id`, `places`.`id` FROM `places`;
Переменная @serial в основном увеличивается, только если новый идентификатор не совпадает с последним.
После выполнения этих запросов в терминале и печати значений @serial и @thisid получаемое значение равно @ thisid = 'id6' @ serial = 6.
Я выполнил этот запрос в своем коде go:
if _, err = repo.db.ExecContext(ctx, "SET @thisid=0;"); err != nil {
return
}
if _, err = repo.db.ExecContext(ctx, "SET @serial=0;"); err != nil {
return
}
rows, err = repo.db.QueryContext(ctx, fmt.Sprintf(
"SELECT @serial := IF((@thisid != `places`.`id`), @serial + 1, @serial) as `serial`, @thisid := `places`.`id`, `places`.`id` FROM `places`;",
))
if err != nil {
fmt.Println("error here")
return
}
if err = repo.db.QueryRow("SELECT @serial").Scan(&that); err != nil {
return
}
if err = repo.db.QueryRow("SELECT @thisid").Scan(&this); err != nil {
return
}
При печати значений @thisid и @serial значение @thisid принимается так же, как и значение @serial, равное 0. Кажется, что оно не обновляется динамически.