Используемая база данных : 5.6 (я не могу использовать функцию LAG из mysql 8)
У меня есть следующая структура таблицы в mysql
book_id | Version | Rating | Price
varchar(25) | Decimal(10,2)| int | Decimal(10,2)
У меня есть веб-страница, где я показываю два графика.
На первом графике я покажу количество книг для рейтинга (оценки только от 1 до 4), но только для последних версий.Query1
На втором графике я покажу количество книг в ценовом диапазоне, но только самых последних версий.Query2
Эти два запроса запускаются один за другим каждый раз, когда веб-страница загружается или обновляется.Хотя данные остаются постоянными, иногда я получаю разные результаты для одного и того же запроса.
У меня есть два следующих запроса, которые почти идентичны
QUERY1
SELECT
SUM(CASE WHEN rating=1 THEN 1 ELSE 0) AS rating1,
SUM(CASE WHEN rating=2 THEN 1 ELSE 0) AS rating2,
SUM(CASE WHEN rating=3 THEN 1 ELSE 0) AS rating3,
SUM(CASE WHEN rating=4 THEN 1 ELSE 0) AS rating4
FROM (
SELECT rating, row_number
FROM (
SELECT rating,
@num:=IF(@group:=book_id, @num+1, 1) row_number,
@group:=book_id bi
FROM book_database
ORDER BY book_id, version DESC
) book
HAVING book.row_number = 1
) book
QUERY2
SELECT
SUM(CASE WHEN price <= 1000 THEN 1 ELSE 0) AS cheap,
SUM(CASE WHEN price >1000 THEN 1 ELSE 0) AS costly
FROM (
SELECT price, row_number
FROM (
SELECT price,
@num:=IF(@group:=book_id, @num+1, 1) row_number,
@group:=book_id bi
FROM book_database
ORDER BY book_id, version DESC
) book
HAVING book.row_number = 1
) book
На моей веб-странице несколько экранов с несколькими запросами, но большинство из них работают по одной логике.По сути, я буду запрашивать последнюю версию любой книги, и, следовательно, я использую вложенный запрос.
В некоторых случаях я получаю результаты, отличные от запланированных, когда одни и те же запросы выполнялись несколько раз в одном наборе данных.
Мой запрос правильный?Является ли использование переменных причиной этой проблемы?Поскольку несколько запросов выполняются параллельно (хотя и в разных соединениях с базой данных), использование переменных является подозрительным?