Возникли проблемы с SQL в MySQL. Не уверен, что правильным было вернуть все награды моих пользователей , выигравших ... но только самый высокий AwardLevel из премии они победили. Корабль отношения выглядит следующим образом:
A Пользователь может выиграть много AwardLevel (s) . Каждый AwardLevel привязан к категории, называемой Award . AwardLevels имеют уровень сложности (1, 2 или 3)
Это похоже на значки Stackoverflow, проходящие через награды типа «бронза», «серебро» и «золото».
Я пытаюсь вернуть все награды для пользователя, но отфильтрован до максимального (сложность) рейтинга. Например, чтобы пользователь достиг уровня 3 (сложность = 3), он должен сначала заработать сложность = 1, а затем сложность = 2. Я не хочу показывать все три уровня с моим запросом только самого высокого (MAX). Проблема с моим текущим запросом заключается в том, что GROUP BY, похоже, захватывает первую найденную запись для получения награды. Который иногда не тот, с трудностью = 3. Не уверен, должен ли я поместить выражение MAX где-то еще в запросе.
ОБНОВЛЕННЫЙ ЗАПРОС :
SELECT a.*, MAX(awlev.difficulty)
FROM Award AS a
INNER JOIN AwardLevel AS awlev ON awlev.id = a.level_id
WHERE a.user_id = 3 -- just a sample user_id
GROUP BY awlev.category_id
НАСТРОЙКА СТОЛА :
- Примечание: я забыл таблицу, относящуюся к пользователям.
- чтобы выиграть AwardLevels в этой настройке таблицы, я называю это UserAwardLevels
CREATE TABLE Users (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
fullname VARCHAR(100)
);
CREATE TABLE AwardLevels (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
levelname VARCHAR(100),
difficulty INT
);
CREATE TABLE Awards (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
awardname VARCHAR(100)
);
CREATE TABLE UserAwardLevels (
user_id INT,
awardlevel_id INT
);
CREATE TABLE AwardLevels (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
levelname VARCHAR(100),
difficulty INT
);