MySQL의 SQL에 문제가 있습니다. 확실하지 올바른 다시 원 한 상 내 사용자의 모든을 가지고 있었다 ...하지만 단지 상의 가장 높은 AwardLevel들은이 수상했다. 관계 선박은 다음과 같습니다 :MySQL - Group By, Max, Inner Join - 문제
사용자은 많은 AwardLevel (s)을 이길 수 있습니다. 각 수상 레벨은 수상이라는 카테고리와 관련이 있습니다. AwardLevels의 등급은 (1, 2 또는 3) 입니다. 이것은 Stackoverflow의 배지와 유사하며 Bronze, Silver 및 Gold 유형의 상을 통과 한 것입니다.
나는 모든 상을 사용자에게 돌려 주려하지만 Max (난이도) 등급으로 필터링하고 있습니다. 예를 들어, 사용자가 레벨 3 (난이도 = 3)을 얻으려면 먼저 난이도 = 1, 난이도 = 2를 얻어야합니다. 내 쿼리가 최고 (MAX) 인 세 가지 레벨을 모두 표시하고 싶지는 않습니다. 현재 쿼리의 문제점은 GROUP BY가 보너스로 찾은 첫 번째 레코드를 가져 오는 것 같습니다. 때로는 난이도가 3이 아닌 경우가 있습니다. 3. MAX 식을 다른 쿼리 어딘가에 넣어야하는지 확실하지 않습니다.
업데이트] QUERY :
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
표 설정 : - 참고 : I 사용자 관련된 테이블 잊고 있었던 - 나는 호출이 테이블 설정에서 원 AwardLevels로는
을 UserAwardLevelsCREATE 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
);
사용자가 동일한 보너스 수준으로 여러 상을받을 수 있습니까? –
쿼리에서 별칭이 't'인 테이블이 없습니다. 고쳐주세요. –
님은 귀하의 구조를 이해하지 못했습니다. t.user_id의 내용은 무엇입니까? 당신은 테이블 구조를 게시 할 수 있습니까? – galchen