在MySql中连接表以存储已查看的文章ID

时间:2014-06-04 06:08:59

标签: php mysql sql database joomla3.0

我正在开发一个Joomla网站,而且我是MySql的新手。我需要能够跟踪用户查看了多少篇文章,然后才能在页面的前端显示已浏览文章的总数(例如,如果用户查看了3篇文章,它应该只是回显值'3'到前端)。

我还希望能够存储文章ID和别名,并且能够在以后需要时检索该数据。我们的想法是,任何特定的用户都能够看到他们查看了多少篇文章,甚至可以返回并查看这些文章(因为一旦查看它们就不再显示)。

关于构建存储此数据的表以及如何将其连接到当前用户,我还没有最开心的想法。任何帮助将不胜感激,即使它只是指向一个很好的教程或资源。

2 个答案:

答案 0 :(得分:0)

我相信有三种方法:

将所有已查看文章ID存储在用户表格的新列中
您可以在用户表中添加一列来存储查看过的文章。您可以将文章ID存储为以逗号分隔的值。每次查看新文章时,您都可以附加新文章ID。在前端,您可以使用select语句检索此字符串并将其解析以获取各个ID。

对于像Joomla这样的CMS,这种方法可能不实用,因为向系统表中添加列会遇到麻烦。

每个用户一行的新表
您创建一个新的两列表,一列具有用户ID,另一列具有逗号分隔的已查看文章列表。现有用户表与新表之间将存在1-0的关系。

简单的连接将允许您检索与关联用户关联的已查看文章。

每个用户/文章组合一行的新表
您创建一个新的两列历史记录表,用于存储用户和单个已查看的文章ID。如果用户查看了10篇文章,则会有10行。

检索给定用户的已查看文章需要一些工作,因为您必须为该用户提取所有行并迭代它们。

编辑 - 示例代码:

<?php
$config['db'] = array (
    'host' => '',
    'username' => '',
    'password' => '',
    'dbname'    => ''
);

$db = new PDO('mysql:host=' . $config['db']['host'] . ';dbname='.$config['db']['dbname'],$config['db']['username'],$config['db']['password']);

$query = $db->query("SELECT user_id, article_id FROM viewed_articles WHERE user_id = 1234");

$rows = $query->fetchAll(PDO::FETCH_ASSOC);

echo '<pre>',print_r($rows,true),'</pre>';

?>

您可以在$ config数组中输入MySQL数据库和凭据。

答案 1 :(得分:0)

一个好方法是使用模块显示数据和插件来存储它。

要跟踪用户查看的文章,请使用Joomla documentation for plugin development.开始查找内容插件。 此插件应至少将用户标识符和文章标识符存储在专门为此插件创建的表(称为articleviews)上。

要构建模块,请检查Joomla module development。在此模块中,您将从articleviews表加载与插件一起存储的数据。请记住按用户标识符对表进行索引,否则会随着数据的增长而终止Web响应。

编辑:文章标识符也应该是索引的一部分。