繁体   English   中英

限制group_concat中的串联

[英]Limit concatenatings in group_concat

我只是遇到一个我不知道如何解决的问题。 它与 (已解决)问题有关。

就像在另一篇文章中提到的,我有一个Media表,可以容纳同一用户的许多记录,但是我只想显示最多六个记录(在任何情况下,只显示一个Type 1图像,然后是一个最多五个Type 2图像)。

只要只有一个Type 1图像,我现在的查询就可以正常工作,但是当我添加另一个Type 1图像时,查询将同时显示它们。 不幸的是, GROUP_CONCAT中的ORDER BY UserMedia.m_Type = 1 DESC LIMIT 1不能正常工作,但这正是我所需要的。 有人有一个聪明的主意如何实现这一目标吗?

我在这里有一个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

散步了,并提供了以下解决方案。 也许不是最漂亮的,但至少它能起作用。 我也意识到我不需要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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM