1

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

1 に答える 1

3

あなたのテーブルは正規化されておらず、スキーマ設計が悪いと見なされています。とにかく、あなたの質問に直接答えるために、CSV 形式で特定の値を検索するMySQLという組み込み関数があります。FIND_IN_SET

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
于 2013-03-18T06:18:54.953 に答える