2013-03-13 85 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