データをマージしたいテーブルがいくつかあります。テーブルから基本情報を選択User
し、テーブルUser_Status
、User_Sex_Info
、User_Personal_Info
およびからデータを結合したいと考えていますMedia
。
このテーブルは同じユーザーの多くのレコードを保持できるため、テーブルからのデータで問題が発生していますMedia
が、最大6つのレコードのみを表示したい(いずれにせよ、1つのType
画像、その後に最大 5 つのType
2 画像)。他のテーブルには、各ユーザーの行が 1 つしかありません。現在、データを選択するための次の表があります。
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);
私は何かを見落としていますか?なぜ機能しないのかわかりません。
EDITクエリを使用してSQL Fiddle を作成すると、データが 7 行で表示されます。ローカルで実行すると行が表示されない理由がわかりません
EDIT 2
どうやらGROUP_CONCAT
phpmyadminがSQL Fiddleと同じ結果を示しているため、問題は. 私はそれを見るつもりです
解決しました!
間違ったパラメーターでデータをグループ化しました。グループ化する必要がありましたUser.u_UserId
。ご覧いただきありがとうございます。