微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 从表中选择逗号分隔的记录以及用户图像

表: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.

我想根据users表的friends列从frei_session表中检索数据.

对于Ex

如果用户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

SQL Fiddle Demo

解决方法:

frei_session的结果是用户(a)的朋友,这就是为什么它不包含你朋友的图像,而是你想要搜索用户的图像.因此,为了让您获得朋友形象,您需要将其加入另一个用户(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

> SQLFiddle Demo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐