2013-07-30 52 views
0

我有幾張表,我想要合併數據。我從User表中選擇基本信息,並希望加入來自表User_StatusUser_Sex_Info,User_Personal_InfoMedia的數據。加入和GROUP_CONCAT數據的順序的問題

我遇到了來自Media表的數據的問題,因爲此表可以容納同一用戶的多個記錄,但我只想顯示最多六個記錄(按順序,無論如何,一個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 

這一個適用於所有的數據很好,除了媒體文件。輸出爲18-profile.jpg,而我期待18-profile.jpg-18-2.jpg-18-2.jpg-18-4.jpg-18-5.jpg-18-6.jpg

Media表看起來像這樣:

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); 

我是否忽略了什麼?我不明白爲什麼它不起作用。

編輯 我創建與查詢SQL Fiddle和顯示七行我的數據。我不明白爲什麼它不顯示任何更多行時我本地運行

EDIT 2 顯然的問題是,因爲在phpmyadmin的的GROUP_CONCAT顯示了相同的結果SQL小提琴。我要看看

解決了它! 我把數據分組在錯誤的參數上,我需要按User.u_UserId進行分組。感謝您的期待!

+0

你使用'-'作爲'GROUP_CONCAT'分隔符,但它也是文件名中的一個字符 - 你不覺得這會混淆事物嗎? – Barmar

+0

你可以用示例數據製作一個sqlfiddle嗎? – Barmar

+0

我創建了一個SQL小提琴,謝謝你的評論。我將分隔符更改爲| – Maurice

回答

0

變化

GROUP BY UserMedia.m_Id 

GROUP BY User.u_userId 

m_Id對每個媒體行的唯一的,所以你沒有任何分組在一起。

+0

我們在同一時間找到了:)謝謝! – Maurice