0

みなさん、こんにちは。

私は本当にあなたの助けが必要です。すべてのユーザーのリスト (個別) を取得する必要があります。

お気に入りのチームは、info_matches.team_id1 または info_matches.team_id2 またはその両方です。

関連するテーブルの小さなデザインを次に示します。

デザイン

私が試したことは、80% で動作します (したがって、そうではありません:( ) 一部のユーザーは正しく返されます (彼らは 3 つ以上のゴール差でお気に入りのチームを返します) が、お気に入りのチームを持たないユーザーも返します。どちらかのチームが 3 点以上の差で勝った試合のライブ チェックインを行ったため、返されたと思います。

これが私のクエリです:

個別選択
    f.id
から
    ファンユーザー f
左結合
    checkins c ON f.id = c.fanuser_id
左結合
    info_matches m ON m.id = c.match_id
どこ
    c.ctype = 'ライブ' AND
(
        m.team_id1 IN(
                個別選択
                    m1.team_id1
                から
                    info_matches m1
                右結合
                                        fanusers_teams ft ON m1.team_id1 = ft.team_id
                右結合
                                        fanusers f ON f.id = ft.fanuser_id
                どこ
                    m1.pointsteam1 - m1.pointsteam2 >= 3
                  )
        また

        m.team_id2 IN(
                個別選択
                    m2.team_id2
                    から
                    info_matches m2
                右結合
                                        fanusers_teams ft ON m2.team_id2 = ft.team_id
                右結合
                                        fanusers f ON f.id = ft.fanuser_id
                どこ
                    m2.pointsteam2 - m2.pointsteam1 >= 3
                  )
)

このクエリの解決に成功した人がいる場合は、何が間違っているのかについての簡単な説明もいただければ幸いです。

ありがとう。

4

2 に答える 2

3

このようなものが動作するはずです:

SELECT  DISTINCT f.id 

FROM    fanusers f 

        JOIN checkins c 
        ON f.id = c.fanuser_id 

        JOIN fanusers_teams ft
        ON f.id = ft.fanuser_id

        JOIN info_matches m 
        ON m.id = c.match_id 
        AND 
        (
            (ft.team_id = m.team_id1 AND pointsteam1 - pointsteam2 >= 3) 
        OR 
            (ft.team_id = m.team_id2 AND pointsteam2 - pointsteam1 >= 3)
        )

WHERE   c.ctype = 'live'
于 2012-12-11T15:36:44.457 に答える
0

クエリを解決する方法も見つけましたが、トムが行ったほど良くはありません。

私のやり方 :

個別選択
                            f.id AS user_id
                        から
                            ファンユーザー f
                        左結合
                            checkins c ON f.id = c.fanuser_id
                        左結合
                            info_matches m ON m.id = c.match_id
                        どこ
                            c.ctype = 'ライブ'
                            と
                            m.matchisfinished = 1
                            と
                            c.fanuser_id NOT IN ( SELECT DISTINCT
                                                                            f1.id
                                                                        から
                                                                            ファンユーザーf1
                                                                        左結合
                                                                            fanusers_stickers fs
                                                                        オン f1.id = fs.fanuser_id
                                                                        どこ
                                                                            fs.sticker_id = 35
                                                                    )
                            と
                            (
                                ( m.team_id1 IN ( SELECT DISTINCT
                                                                                ft.team_id
                                                                            から
                                                                                fanusers_teams フィート
                                                                            内部結合
                                                                                チェックイン c1
                                                                            オン
                                                                                ft.fanuser_id = c1.fanuser_id
                                                                            どこ
                                                                                f.id = c1.fanuser_id
                                                                    )
                                        と
                                        m.pointsteam1-m.pointsteam2>=3
                                    )

                                    また

                                    (
                                         m.team_id2 IN ( SELECT DISTINCT
                                                                                    ft.team_id
                                                                                から
                                                                                    fanusers_teams フィート
                                                                                内部結合
                                                                                    チェックイン c1
                                                                                オン
                                                                                    ft.fanuser_id = c1.fanuser_id
                                                                                どこ
                                                                                    f.id = c1.fanuser_id
                                                                        )
                                            と
                                            m.pointsteam2-m.pointsteam1>=3
                                    )
                            )

したがって、当分の間、クエリを自分で解決できてよかったとしても、Tom のクエリを使用します :)。

于 2012-12-11T16:05:35.463 に答える