2013-03-13 59 views
0

我寫的與作者一起檢索的Joomla文章SQL請求:的SQL請求,dublicates所有內容

static function getLists(&$params) 
    { 
     $db  = JFactory::getDbo(); 
     $lists = null; 
     $query = "SELECT cc.title AS category, a.id, a.title, a.created as created, av.add_image as imgthrumb, ua.avatar as avatar, ar.intotext as introtext, ss.userid as onlineid, 
     u.id AS userlink, u.username as username, u.lastvisitDate as lastvisit, a.hits, cc.id as catid, a.state as state, a.created_by as authorid, mp.group_id as groupid, ug.title as ugtitle 
     FROM #__content AS a 
     LEFT JOIN #__categories AS cc ON a.catid = cc.id 
     LEFT JOIN #__users AS u ON u.id = a.created_by 
     LEFT JOIN #__cck_store_item_content AS av ON av.id = a.id 
     LEFT JOIN #__comprofiler AS ua ON user_id = a.created_by 
     LEFT JOIN #__cck_store_item_cck_store_item_content AS ar ON ar.id = a.id 
     LEFT JOIN #__user_usergroup_map AS mp ON mp.user_id = a.created_by 
     LEFT JOIN #__usergroups AS ug ON ug.id = mp.group_id 
     LEFT JOIN #__session AS ss ON ss.userid = u.id AND ss.userid > 0 AND ss.guest = 0 
     WHERE a.created_by = u.id AND a.id >0 
     AND DATE(a.created) >= DATE_SUB(CURRENT_DATE, INTERVAL ".(int)$safe_date." DAY) AND a.access = 1 AND a.state = 1 AND a.created > 0 
     ORDER BY created desc"; 
     $db->setQuery($query,0,10); 
     $lists = $db->loadObjectList();   

     return $lists; 

    } 

它的工作原理就像一個魅力,但繼承人一些奇怪的一部分,如果我登錄不同的瀏覽器相同的用戶,它會將所有內容複製兩次,如果我第三次登錄,它將複製所有內容3次,等等!據我所見,問題出在這一行:

LEFT JOIN #__session AS ss ON ss.userid = u.id AND ss.userid > 0 AND ss.guest = 0 

有什麼建議嗎?

+0

你爲什麼加入會議表? – 2013-03-13 16:03:10

+0

我需要知道給定作者目前是否在線,是否可以不加入? – 2013-03-13 16:08:47

+1

,如果你做'選擇不同'? – 2013-03-13 17:19:39

回答

0

它重複,因爲從另一個瀏覽器登錄爲該用戶創建一個新的會話。嘗試做

SELECT DISTINCT 
... 
+0

分組後ss.userid我只得到2結果,而不是10 ... :(我有點有點在這裏丟失 – 2013-03-13 17:12:23

+0

@AndrewSekaev更新了答案! – 2013-03-13 17:54:10

+0

thx隊友,幫助我:) – 2013-03-13 19:08:49

1

您可能想要爲此user_id添加一個別名,以便數據庫知道此user_id引用了哪個表。

LEFT JOIN #__comprofiler AS ua ON user_id = a.created_by

我會跑小版本的查詢,看看當開始越來越推出的副本。從前3個表格連接開始。如果您沒有看到重複項,請再添加一個連接,以便您加入查詢中的前四個表。將有助於準確找到引入問題的位置。

+0

我添加了別名但沒有運氣,並且問題消失,如果我將JOIN #__Session取出,所以#__Session會導致重複... – 2013-03-13 16:26:19

+0

哦。您需要在where子句中使用用戶標識。此查詢正在爲所有用戶運行。您沒有指定哪個用戶在WHERE中登錄。 – ranrun 2013-03-13 16:32:31

+0

嗯,那是因爲我沒有得到它的特定用戶,它的列表。後來我做你在foreach中的建議$ item-> onlineid – 2013-03-13 16:38:18