表: frei_session
id username accountId status status_mesg
14 Sumit Bijvani 50 0 I am available
16 Dilip Borad 49 1 I am available
15 Karan Bijvani 51 1 I am available
表:用户
accountId friends userImage
49 50,52 49.jpg
50 49,52,51,44 50.jpg
51 50 51.jpg
我有2个表, frei_session 有在线用户记录,用户表中有用户和朋友的数据,用逗号分隔ID。
我想根据用户表的朋友列从 frei_session 表中检索数据。
对于Ex
如果user 49
在线,我想要输出,如下所示
id username accountId status status_mesg userImage
14 Sumit Bijvani 50 0 I am available 50.jpg
因为用户50和52是用户49的朋友,但现在只有用户50在线
我试过以下查询。但它显示我错误的userImage。
SELECT b.*, a.userImage
FROM users a
INNER JOIN frei_session b
ON FIND_IN_SET(b.accountID, a.friends) > 0
INNER JOIN
(
SELECT accountID, username, MAX(id) id
FROM frei_session
GROUP BY accountID, username
) c ON b.accountID = c.accountID AND
b.username = c.username AND
b.id = c.id
WHERE b.status = 0 AND
a.accountID = 49
答案 0 :(得分:3)
frei_session
的结果是user (a)
的朋友,这就是为什么它不包含您朋友的图像,而是您要搜索的用户的图像。因此,为了让您获取朋友形象,您需要将其加入另一个user (d)
,以便您可以从frei_session
表中获取正确的图像。
SELECT b.*, d.userImage
FROM users a
INNER JOIN frei_session b
ON FIND_IN_SET(b.accountID, a.friends) > 0
INNER JOIN
(
SELECT accountID, username, MAX(id) id
FROM frei_session
GROUP BY accountID, username
) c ON b.accountID = c.accountID AND
b.username = c.username AND
b.id = c.id
INNER JOIN users d
ON b.AccountID = d.AccountID
WHERE b.status = 0 AND
a.accountID = 49
答案 1 :(得分:2)
通过规范化表格,您可以使用基本的JOIN操作来完成所有这些操作。请查看database normalization,因为您的架构违反了正确数据库设计的所有规则。
friends
包含多个值,因此违反了该值
第一个正常形式。status_mesg
取决于status
和
因此违反了第二种正常形式。