[英]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.