0

解決方法がわからない問題に直面しています。この(解決済み)問題に関連しています。

他の投稿で述べたようにMedia、同じユーザーの多くのレコードを保持できるテーブルがありますが、最大6つのレコードのみを表示したい(いずれにせよ、1つのType画像のみ、その後に最大5 つのType2 つの画像)。

私が今持っているクエリは、画像が1つしかない限り正常に機能しますがType、別の画像を1つ追加するTypeと、クエリは両方を表示します。残念ながら、のようなものORDER BY UserMedia.m_Type = 1 DESC LIMIT 1GROUP_CONCAT機能しませんが、まさに私が必要としているものです。これを実現する賢いアイデアはありますか?

ここに、関連するコードを含むSQL Fiddleがあります。私のクエリは次のようになります


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 userFiles 
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 = '18'
    GROUP BY User.u_UserId

4

1 に答える 1

0

散歩に行って、次の解決策を見つけました。最も美しいものではないかもしれませんが、少なくとも機能します。私はまた、私はそのCONCAT機能を必要としないことに気づきました


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(
                    UserMedia.m_File
                        ORDER BY UserMedia.m_Type = 1 DESC 
                        SEPARATOR '|'
                ),'|',1
            ) AS userFiles, 
            SUBSTRING_INDEX(
                GROUP_CONCAT(
                    UserMedia.m_File
                        ORDER BY UserMedia.m_Date DESC 
                        SEPARATOR '|'
                ),'|',5
            ) AS userTypes, 
            SUBSTRING_INDEX(
                GROUP_CONCAT(
                    Interests.ui_Interest SEPARATOR '|'
                ),'|',5
            ) AS userInterests
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
        LEFT JOIN User_Interest_Info AS Interests ON Interests.User_u_UserId = User.u_UserId
WHERE User.u_UserId = :uId
    GROUP BY User.u_UserId
于 2013-07-30T14:55:13.277 に答える