我正在开发一个自定义模块,根据当前用户是否阅读过文章来显示动态文章列表。当用户阅读或“提交”文章时,文章ID和标题存储在名为“completed_quests”的表中。动态列表仅显示在completed_quests表中找不到的文章。下面的代码完全正常,但是我遇到了一些问题。
目前,无论登录哪个用户,列表都以相同的方式显示。例如,假设用户540读取并提交文章。当用户541登录时 - 它正在显示列表,好像用户541也提交了任务。我可能会使这个问题复杂化,但我需要让列表以独特的方式显示,具体取决于登录的用户。请参阅下面的代码。我已经从数据库中提取了用户ID并定义了$ userID变量。现在我只需要知道它在等式中的位置。
编辑:以下是经过修改的工作代码。
<?php
$catID = JRequest::getVar('id');
$user = JFactory::getUser();
$userID = (int)$user->id;
$query = "SELECT * FROM arp2i_completed_quests AS r
RIGHT JOIN arp2i_content AS c
ON c.id=r.id
AND c.catid=r.catid
AND r.user_id = $userID
WHERE r.user_id IS NULL "; // prepare query
$db = &JFactory::getDBO(); // get database object
$db->setQuery($query); // apply query
$articles = $db->loadObjectList(); // execute query, return result list
foreach($articles as $article){ // loop through articles
if ($article->id >1 && $article->catid == $catID) {
echo '<a href="http://localhost/quest/index.php/quests/' . $article->id . '-' . $article->title . '">' . 'ID:' . $article->id . ' Title: ' . $article->title . '</a>' . '<br />';}
}
?>
答案 0 :(得分:0)
根据你的回答是arp2i_completed_quests文件id中的id字段。然后你必须交换连接并使用用户ID创建一个条件。
<?php
$catID = JRequest::getVar('id');
$user = JFactory::getUser();
$userID = (int)$user->id;
$query = "SELECT * FROM arp2i_content as c ";
$query .= "left JOIN arp2i_completed_quests as r on ";
$query .= "c.id=r.id AND c.catid=r.catid and r.user_id != ".$userID." ";
$query .= "where r.id is null"; // prepare query
$db = JFactory::getDBO(); // get database object
$db->setQuery($query); // apply query
$articles = $db->loadObjectList(); // execute query, return result list
foreach ($articles as $article) { // loop through articles
if ($article->id > 1 and $article->catid == $catID) {
echo '<a href="http://localhost/quest/index.php/quests/' . $article->id . '-' . $article->title . '">' . 'ID:' .
$article->id . ' Title: ' . $article->title . '</a>' . '<br />';
}
}
?>