加入麻烦和GROUP_CONCAT数据的顺序

时间:2013-07-30 11:42:44

标签: mysql

我有一些表,我想从中合并数据。我从User表中选择基本信息,并希望加入表User_StatusUser_Sex_InfoUser_Personal_InfoMedia中的数据。

我遇到了来自Media表的数据的麻烦,因为这个表可以保存同一个用户的许多记录,但我只想显示最多六个记录(按顺序,在任何例如,一张Type 1张图片,后面跟着最多五张Type张图片。其他表只有每个用户一行。 我目前有下表来选择数据:


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,并在七行中显示了我的数据。我不明白为什么当我在本地运行时不再显示任何行

编辑2 显然问题出在GROUP_CONCAT,因为phpmyadmin显示与SQL Fiddle相同的结果。我要看那个

解决了它! 我将数据分组到错误的参数上,我需要按User.u_UserId进行分组。谢谢你的期待!

1 个答案:

答案 0 :(得分:0)

更改

GROUP BY UserMedia.m_Id

GROUP BY User.u_userId

m_Id对于每个媒体行都是唯一的,因此您不能将任何内容组合在一起。