【问题标题】:Adding new set of rows to result set to existing query将新的行集添加到现有查询的结果集中
【发布时间】:2012-10-10 16:32:04
【问题描述】:

这是查询中使用的表:

帮助(相关字段: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

但这显然是我所不知道的.. 谁能告诉我灯光?

【问题讨论】:

    标签: mysql sql join sql-order-by


    【解决方案1】:

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

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

    在您的查询中,

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

    【讨论】:

    • 我通过 x.id, x.title, ... 解决了它,你觉得可以吗? -编辑-哈!你在我打字的时候编辑了……只是试着尝试了一下,它起作用了!谢谢!
    • @ToniMichelCaubet 正确。使用表或子查询的Alias。
    猜你喜欢
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多