0

クエリで使用されるテーブルは次のとおりです。

ヘルプ(関連するフィールド:id、id_user)

ここに画像の説明を入力してください

友達

ここに画像の説明を入力してください

SHARED_HELPS

ここに画像の説明を入力してください

それで:

このクエリ(動作)は、ユーザーおよび彼が参照した他のユーザーからのすべてのヘルプを返します。

$sql = 'SELECT
                      helps.*,CASE WHEN shared_helps.userid IS NULL THEN 0 ELSE shared_helps.userid END as is_shared, CASE WHEN shared_helps.userid IS NULL THEN helps.fecha ELSE shared_helps.fecha END as ffecha
                    FROM
                      helps
                    LEFT JOIN  shared_helps
                        ON  shared_helps.helpid = helps.id
                        AND shared_helps.userid = '.$value.'

                    WHERE     (helps.id_user = '.$value.' AND helps.id_group <= 0)  OR shared_helps.userid = '.$value.'



                   ORDER BY ffecha DESC';

また、このクエリ(動作)には、ユーザーからのすべてのヘルプと友人からのヘルプが一覧表示されます

$sql = 'SELECT  id, title, content, id_user, id_group, id_type, id_loc, avatar, attached, fecha, likes, lan, needsCount, recivedCount
                    FROM
                        (
                            SELECT *, 1 as OrderBy           
                                FROM helps 
                             WHERE id_user = '.$value.' or id_user IN (SELECT helpid FROM shared_helps WHERE userid = '.$value.')
                            UNION
                            SELECT  h.*, 2 as OrderBy        
                                 FROM    (
                                        SELECT  id  AS friendsId,
                                                CASE followerid 
                                                    WHEN '.$value.' THEN followingid 
                                                    ELSE followerid 
                                                END AS friend_id
                                        FROM    friends
                                        WHERE   acepted = 1 AND 
                                                (followerid  ='.$value.' OR followingid = '.$value.')
                                    ) AS f
                                        INNER JOIN helps AS h 
                                            ON h.id_user = f.friend_id where id_group < 0
                        ) x
                    ORDER BY ID DESC
                    ';

最後に、他のユーザーからのものを追加する必要がありますが、彼は参照しました(私が投稿した2つのクエリの組み合わせのようなものです)。

私はこれを試しました:

$sql = 'SELECT  id, title, content, id_user, id_group, id_type, id_loc, avatar, attached, fecha, likes, lan, needsCount, recivedCount,
                            CASE WHEN shared_helps.userid IS NULL THEN helps.fecha ELSE shared_helps.fecha END as ffecha
                    FROM
                        (
                            SELECT *, 1 as OrderBy           
                                FROM helps 
                             WHERE id_user = '.$value.' or id_user IN (SELECT helpid FROM shared_helps WHERE userid = '.$value.')
                            UNION
                            SELECT  h.*, 2 as OrderBy        
                                 FROM    (
                                        SELECT  id  AS friendsId,
                                                CASE followerid 
                                                    WHEN '.$value.' THEN followingid 
                                                    ELSE followerid 
                                                END AS friend_id
                                        FROM    friends
                                        WHERE   acepted = 1 AND 
                                                (followerid  ='.$value.' OR followingid = '.$value.')
                                    ) AS f
                                        INNER JOIN helps AS h 
                                            ON h.id_user = f.friend_id where id_group < 0
                        ) x
                    LEFT JOIN  shared_helps
                            ON  shared_helps.helpid = x.id
                            AND shared_helps.userid = '.$value.'

                        WHERE     (x.id_user = '.$value.' AND helps.id_group <= 0)  OR shared_helps.userid = '.$value.'



                    ORDER BY ffecha DESC
                    ';

しかし、私は得ました:

Column 'id' in field list is ambiguous

しかし、これは明らかに私の知識の範囲外です。誰かが私にligthを見せてもらえますか?

4

1 に答える 1

1

私が間違っていない場合はID、すべてのテーブルに列があるため、列の出所を指定する必要がありますID

tableNameHelpsを追加してみてください。これは、サブクエリに含まれているためです。x

だからあなたのクエリでは、

SELECT x.ID, ....
FROM...
WHERE ....
于 2012-10-10T16:35:29.823 に答える