サブクエリから2つの結果を取得する

ヨハン・バウアー

Androidアプリのユーザーがどのような写真を好むかを追跡したいと思います。

アプリを使用しているすべてのデバイスを含む1つのテーブル(データベース内)があります。ユーザーは(オプションで)自分のアカウントにログインできます。もちろん、いいねはデバイスではなくアカウントにリンクする必要があります。ユーザーは複数のデバイスにログインでき、同じいいねが表示されます。

これで、私のdevicesテーブルは次のようになります。

| device_id | associated_user | android_id |

associated_userユーザーがログインしている場合のユーザーIDまたは0はどこにありますか。これandroid_idは、アプリインスタンスを識別するための一意の文字列です。device_id自動インクリメントされた内部キーです。

そして私のlikesテーブルはこのように:

| owner_id | is_user_id | picture_id |

owner_id誰かがログインしている場合はユーザーIDになり、device_idそうでない場合はデバイスからログインします

android_idからいいねを取得するには、次のようにします。

 SELECT picture_id WHERE owner_id = (SELECT IF(associated_user > 0, associated_user, device_id) as owner_id FROM devices WHERE android_id='abcdefg' LIMIT 1) AND is_user_id=(SELECT IF(associated_user > 0, 1, 0) as is_user_id FROM devices WHERE android_id='abcdefg' LIMIT 1)

しかし、それはあまり効率的ではないようです。

これは合理的なデータベース設計ですか、それとももっと効率的なものを考えられますか?android_idを介していいねを取得するための最良のアプローチは何でしょうか?

ゴードン・リノフ

欠落しているfrom句は次のものだと思いlikesます:

SELECT picture_id 
FROM likes l
WHERE EXISTS (select 1 
              from devices d
              where android_id = 'abcdefg' and
                    ((l.ownerid = d.associated_user and d.associated_user > 0) or
                     (l.ownerid = d.device_id and d.associated_user <= 0)
                    ) and
                    l.is_user_id = (d.associated_user > 0)
             );

この場合とクエリの両方で、サブクエリのロジックは少し厄介だと思います。これはより単純で、同じことを行う必要があります。

WHERE EXISTS (select 1 
              from devices d
              where android_id = 'abcdefg' and
                    ((l.ownerid = d.associated_user and l.is_user_id > 0) or
                     (l.ownerid = d.device_id and l.is_user_id = 0)
                    )
             );

の目的が何であるかはわかりませんlimit 1が、元のバージョンでは、チェックされている2つの行が異なるという大きなリスクがあります。order by行の順序を保証する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

サブクエリからmysqlクエリを作成する方法は、2つの結果を1つの結果に結合します

分類Dev

Where条件が異なる1つのテーブルから2つのクエリの結果を取得する

分類Dev

2つの異なるmysqlテーブルから特定のクエリ結果を取得します

分類Dev

サブクエリなしで2つのテーブルの結合から最大IDの行を取得する

分類Dev

リストから値が一致するサブクエリの結果を取得する

分類Dev

1つのMySQLクエリから2つの異なる結果を取得できますか?

分類Dev

1つのSQLクエリを使用して2つのテーブルから結果を取得するにはどうすればよいですか?

分類Dev

3つのテーブルから目的の結果を取得するためのSQLクエリ

分類Dev

クエリから1つの結果のみを取得する-結果をCSVファイルに保存する

分類Dev

共通の列を持つ2つのテーブルから結果を取得するには、単一のSQLクエリが必要です

分類Dev

1つの選択クエリから複数の結果を取得する

分類Dev

2つのサブクエリの結果を互いに除算する

分類Dev

3つのサブクエリの結果を追加する

分類Dev

結合クエリとサブクエリを使用して2つのテーブルから行を取得する

分類Dev

サブクエリから結果を除外するSQLSelect

分類Dev

サブクエリから関数の結果の列を参照する方法は?

分類Dev

同じテーブルからの2つのSQLクエリの結果を合計する

分類Dev

サブクエリからのSUM()結果を合計に計算する

分類Dev

身長と体重のために同じテーブルの列から2つのクエリの結果を取得する方法

分類Dev

2つのクエリからの2つの結果(同じ列)を1つのクエリテーブルに表示する方法

分類Dev

codeigniterのajax投稿から結果クエリを取得する方法

分類Dev

JOINクエリから一意の結果を取得する

分類Dev

クエリから2019年の結果を取得する

分類Dev

1つのクエリで別のIDから結果を取得するためのクエリ

分類Dev

2 つのテーブルから結果をソートする複雑な mysql クエリ

分類Dev

他のクエリの出力から最大の結果を取得するクエリ

分類Dev

異なるテーブルからの複数のクエリ結果を1つのクエリ結果テーブルに結合する

分類Dev

最初の結果を2番目の結果(サブクエリ)で使用してすべての行を取得する1つの結合に対する1つのクエリ

分類Dev

PHPで2つのクエリを結合して結果を取得する方法

Related 関連記事

  1. 1

    サブクエリからmysqlクエリを作成する方法は、2つの結果を1つの結果に結合します

  2. 2

    Where条件が異なる1つのテーブルから2つのクエリの結果を取得する

  3. 3

    2つの異なるmysqlテーブルから特定のクエリ結果を取得します

  4. 4

    サブクエリなしで2つのテーブルの結合から最大IDの行を取得する

  5. 5

    リストから値が一致するサブクエリの結果を取得する

  6. 6

    1つのMySQLクエリから2つの異なる結果を取得できますか?

  7. 7

    1つのSQLクエリを使用して2つのテーブルから結果を取得するにはどうすればよいですか?

  8. 8

    3つのテーブルから目的の結果を取得するためのSQLクエリ

  9. 9

    クエリから1つの結果のみを取得する-結果をCSVファイルに保存する

  10. 10

    共通の列を持つ2つのテーブルから結果を取得するには、単一のSQLクエリが必要です

  11. 11

    1つの選択クエリから複数の結果を取得する

  12. 12

    2つのサブクエリの結果を互いに除算する

  13. 13

    3つのサブクエリの結果を追加する

  14. 14

    結合クエリとサブクエリを使用して2つのテーブルから行を取得する

  15. 15

    サブクエリから結果を除外するSQLSelect

  16. 16

    サブクエリから関数の結果の列を参照する方法は?

  17. 17

    同じテーブルからの2つのSQLクエリの結果を合計する

  18. 18

    サブクエリからのSUM()結果を合計に計算する

  19. 19

    身長と体重のために同じテーブルの列から2つのクエリの結果を取得する方法

  20. 20

    2つのクエリからの2つの結果(同じ列)を1つのクエリテーブルに表示する方法

  21. 21

    codeigniterのajax投稿から結果クエリを取得する方法

  22. 22

    JOINクエリから一意の結果を取得する

  23. 23

    クエリから2019年の結果を取得する

  24. 24

    1つのクエリで別のIDから結果を取得するためのクエリ

  25. 25

    2 つのテーブルから結果をソートする複雑な mysql クエリ

  26. 26

    他のクエリの出力から最大の結果を取得するクエリ

  27. 27

    異なるテーブルからの複数のクエリ結果を1つのクエリ結果テーブルに結合する

  28. 28

    最初の結果を2番目の結果(サブクエリ)で使用してすべての行を取得する1つの結合に対する1つのクエリ

  29. 29

    PHPで2つのクエリを結合して結果を取得する方法

ホットタグ

アーカイブ