3

表 : 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にはオンラインユーザーのレコードがあり、usersテーブルにはユーザーとその友人のデータがコンマで区切られたIDがあります。

usersテーブルのfriends列に基づいてfrei_sessionテーブルからデータを取得したいと考えています。

例の場合

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

SQL フィドルのデモ

4

2 に答える 2

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
于 2013-03-18T07:58:29.940 に答える
2

テーブルを正規化することで、基本的な JOIN 操作でこれらすべてを実行できます。スキーマが適切なデータベース設計のすべての規則に違反しているため、データベースの正規化を確認してください。

  • friends複数の値を含むため、第 1 正規形に違反します。
  • status_mesgは、第 2 正規形に依存しstatusているため、第 2 正規形に違反しています。
于 2013-03-18T08:14:07.480 に答える