2013-07-30 1 views
0

데이터를 병합 할 테이블이 몇 개 있습니다. User 테이블에서 기본 정보를 선택하고 User_Status, User_Sex_Info, User_Personal_InfoMedia 테이블의 데이터를 조인하려고합니다.가입시 문제 및 GROUP_CONCAT 데이터의 순서

Media 테이블의 데이터에 문제가 발생합니다.이 테이블은 동일한 사용자의 많은 레코드를 보유 할 수 있지만 최대 6 개의 레코드 만 표시하기 때문에 (순서에 관계없이 하나의 Type 이미지 1 개, 그 다음 최대 5 개 이미지 Type 이미지 2 개). 다른 테이블에는 각 사용자에 대해 하나의 행만 있습니다.


SELECT 
    User.u_UserName, User.u_UserMail, User.u_UserRegistration, 
     Status.us_PaymentStatus, 
     Sex.us_Gender, Sex.us_Interest, 
      Personal.up_Name, Personal.up_Dob, Personal.up_City, Personal.up_Province, 
      UserMedia.m_Id, UserMedia.m_Type, SUBSTRING_INDEX(
       GROUP_CONCAT(
        CONCAT(
         UserMedia.m_Type, ':', UserMedia.m_File 
        ) 
        ORDER BY UserMedia.m_Type = 1, UserMedia.m_Date DESC SEPARATOR '-' 
       ),'-',6 
      ) AS userFile 
FROM User AS User 
    JOIN User_Status AS Status ON Status.User_u_UserId = User.u_UserId 
    JOIN User_Sex_Info AS Sex ON Sex.User_u_UserId = User.u_UserId 
     LEFT JOIN User_Personal_Info AS Personal ON Personal.User_u_UserId = User.u_UserId 
     LEFT JOIN Media AS UserMedia ON UserMedia.User_u_UserId = User.u_UserId 
WHERE User.u_UserId = :uId 
GROUP BY UserMedia.m_Id 

이 하나가 미디어 파일을 제외한 모든 데이터에 잘 작동 : 나는 현재 데이터를 선택하기 위해 다음과 같은 테이블이 있습니다.

CREATE TABLE IF NOT EXISTS `Media` (
    `m_Id` int(11) NOT NULL AUTO_INCREMENT, 
    `m_Type` enum('1','2','3') NOT NULL DEFAULT '3' COMMENT '1 = Profile picture\n2 = User picture\n3 = Content image', 
    `m_File` varchar(255) NOT NULL, 
    `m_Date` datetime NOT NULL, 
    `User_u_UserId` int(11) NOT NULL, 
    PRIMARY KEY (`m_Id`,`User_u_UserId`), 
    UNIQUE KEY `m_id_UNIQUE` (`m_Id`), 
    UNIQUE KEY `m_name_UNIQUE` (`m_File`), 
    KEY `fk_Media_User1_idx` (`User_u_UserId`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; 

INSERT INTO `Media` (`m_Id`, `m_Type`, `m_File`, `m_Date`, `User_u_UserId`) VALUES 
(2, '1', '18-profile.jpg', '2013-07-30 00:00:00', 18), 
(3, '2', '18-1.jpg', '2013-07-30 00:00:00', 18), 
(4, '2', '18-2.jpg', '2013-07-30 00:00:00', 18), 
(5, '2', '18-3.jpg', '2013-07-30 00:00:00', 18), 
(6, '2', '18-4.jpg', '2013-07-30 00:00:00', 18), 
(7, '2', '18-5.jpg', '2013-07-30 00:00:00', 18), 
(8, '2', '18-6.jpg', '2013-07-30 00:00:00', 18); 

내가 뭔가를 간과 수행 내가 18-profile.jpg-18-2.jpg-18-2.jpg-18-4.jpg-18-5.jpg-18-6.jpg

Media 표는 다음과 같습니다 기대 동안 출력은 18-profile.jpg입니까? 왜 작동하지 않는지도 모르겠다.

편집 나는 쿼리와 SQL Fiddle을 만들어 그 일곱 행에 내 데이터를 보여줍니다. 내가

2 은 분명히 문제가 phpMyAdmin을 이후 GROUP_CONCAT에 편집이 SQL 바이올린과 같은 결과를 보여줍니다 로컬로 실행할 때 나는 더 이상 행을 표시하지 왜 이해가 안 돼요. 나는 그걸 보러 갈거야

솔트되었습니다! 데이터를 잘못된 매개 변수로 그룹화했습니다. 그룹화해야하는 숫자는 User.u_UserId입니다. 보고 주셔서 감사합니다! 당신이 함께 아무것도 그룹화되지 않은, 그래서

+0

'GROUP_CONCAT'구분 기호로'-'를 사용하고 있지만 파일 이름의 문자이기도합니다. 그렇게하면 혼란 스러울 것 같지 않습니까? – Barmar

+0

샘플 데이터로 sqlfiddle을 만들 수 있습니까? – Barmar

+0

나는 SQL Fiddle을 만들었고 그 발언에 감사한다. 구분 기호를 | – Maurice

답변

0

변경

GROUP BY UserMedia.m_Id 

GROUP BY User.u_userId 

m_Id 각 미디어 행에 대해 고유합니다.

+0

우리는 동시에 그것을 발견 :) 감사합니다! – Maurice