这些是查询中使用的表:

HELPS(相关字段: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
                    ';


事情是最后一个,我需要添加来自其他用户的内容,但他引用了(就像我发布的两个查询的混合。)

我尝试了这个:

$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吗?

最佳答案

如果我没记错的话,您需要指定列ID的来源,因为所有表都具有列ID

尝试添加tableName Helps,因为它包含在子查询x

所以在您的查询中

SELECT x.ID, ....
FROM...
WHERE ....

10-06 16:01
查看更多