2012-10-10 18 views
0

這是被在querys使用的表:添加新的行集合結果設置爲現有的查詢

HELPS(領域相關的:ID,id_user)

enter image description here

FRIENDS

enter image description here

SHARED_HELPS

enter image description here

所以:

這個查詢(作品)返回人從用戶的幫助和所有其他用戶,他引用:

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

回答

1

如果我沒有弄錯,你需要指定它來自哪個列ID,因爲所有的表都有列ID

嘗試添加的表名Helps並且因爲它包含一個子查詢x

所以在您的查詢,

SELECT x.ID, .... 
FROM... 
WHERE .... 
+0

我解決它通過x.id,x.title,......你認爲沒關係? -EDIT-哈!你在編輯時,我正在打字...試圖嘗試,它的工作原理!謝謝! –

+0

@ToniMichelCaubet正確。使用表或子查詢的「別名」。 –