【问题标题】:Select comma-separated records from table从表中选择逗号分隔的记录
【发布时间】:2013-03-06 10:21:24
【问题描述】:

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

49           50,52
50           49,52,51,44
51           50

我有2张表,frei_session有在线用户记录,users表有用户和好友的数据,ID用逗号隔开。

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

前任

如果user 49 在线,我想要输出,如下所示

id  username        accountId   status  status_mesg

14  Sumit Bijvani   50          0       I am available

因为用户 50 和 52 是用户 49 的朋友,但现在只有用户 50 在线

我尝试过对单个表进行以下查询,但不知道如何处理 2 个表

SELECT DISTINCT status_mesg,username,session_id,status,guest
    FROM frei_session
    WHERE accountId!=49
    AND guest=0
    AND status!=2
    AND status!=0

【问题讨论】:

    标签: php mysql sql join select-query


    【解决方案1】:

    您的表未规范化,被认为是糟糕的架构设计。无论如何,要直接回答您的问题,MySQL 有一个名为 FIND_IN_SET 的内置函数,它可以搜索 CSV 格式的特定值。

    SELECT  b.*
    FROM    users a
            INNER JOIN frei_session b
                ON FIND_IN_SET(b.accountID, a.friends) > 0
    WHERE   b.status = 0 AND
            a.accountID = 49
    

    【讨论】:

    • 非常感谢。你能给我一些关于规范化表格的建议吗?
    • 还有一件事。如果我在 frei_session 中有相同的记录。像 accountID = 50 一样被存储了 2 次。那么我怎样才能从多条记录中只检索一条记录呢?
    • 如果两者都在线,你想检索什么记录/
    • 是的,就像在 frei_session 表中一样,我有多个记录存储在同一个 accountID 中。 accountID=50 被存储两次。所以我只想检索一次
    • 这些记录有相同的AccountIDusername?
    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2020-08-25
    • 2016-12-28
    相关资源
    最近更新 更多