Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 活性饲料结构_Php_Mysql - Fatal编程技术网

Php 活性饲料结构

Php 活性饲料结构,php,mysql,Php,Mysql,我正在构建一个函数,该函数将把我的用户所做的事情的日志添加到我的数据库中,这样我就可以为其他用户的活动提要构建一个活动提要 到目前为止,我想象它是什么样子的 活动表 id | user_id | source | source_id | timestamp 示例输入 1 | 1 | photo_upload | 54 | 1333906150 //54 being the ID of the photo in my DB 2 | 1 | follow | 2 | 1333906159 // 2

我正在构建一个函数,该函数将把我的用户所做的事情的日志添加到我的数据库中,这样我就可以为其他用户的活动提要构建一个活动提要

到目前为止,我想象它是什么样子的

活动表

id | user_id | source | source_id | timestamp
示例输入

1 | 1 | photo_upload | 54 | 1333906150 //54 being the ID of the photo in my DB
2 | 1 | follow | 2 | 1333906159 // 2 being the id of a user
通过这种方式,我可以轻松地从数据库中提取用户活动的信息,
“user_id={$followers}
然后根据其来源显示它们,例如显示照片上传的图像

编辑 显示不同类型的提要的最佳方式是什么。 这是我目前拥有的,但似乎有点多

<?php
$grab = mysql_query("SELECT * FROM `activity` WHERE `user_id` IN (".$following.") ORDER BY `id` DESC");

while($row = mysql_fetch_array($grab)){

    switch ($row['source']) {
        case "photoupload":
            // Display photo upload layout
            break;
        case "follow":
            // Display follow layout
            break;
    }

}
?>


有人看到了改进的方法吗?

有很多方法可以剥猫皮。同样,也有很多方法可以达到你所需要的效果

关于“改进”国际海事组织的一些建议如下:-

1.通过AJAX调用将此数据作为预生成的HTML获取。

加载页面后,使用AJAX调用,您可以让服务器构建用户活动提要的HTML段。这将使您的页面加载速度更快,之后不久将加载您的内容

您甚至不必在服务器上构建HTML—您还可以从AJAX调用传回JSON对象,并使用JavaScript构建HTML

2.创建用户提要的缓存静态HTML文件,该文件仅包含在标记中。

您可以让服务器以一定的间隔(例如每30分钟)生成用户提要所需的所有HTML,然后将该HTML保存到一个文件中,以包含在现有HTML中。您可以使用PHP的
include()
函数来完成此操作

使用此方法,活动提要在刷新时会有一个延迟,因此它可能不是最佳选项,但如果您将间隔缩短,例如每5分钟,您将节省大量对DB的调用

签出-您可以使用它们来安排更新

3.在数据库中的
用户id
字段上放置一个
索引,因为您使用它按用户搜索。

这是一个非常重要的问题,尤其是当您希望数据库中存在许多条目时。在用于搜索表的字段上放置索引将大大提高查询的性能



我相信这里还有很多建议。

创建一个描述feeditem类型的抽象类:

abstract class Application_Feed_Item_Abstract {
    protected $_item;

    public function __construct($itemData) {
        $this->_item = $itemData;
    }

    abstract public function render();
}
针对不同类型的内容实施此类:

class Application_Feed_Item_Photo extends Application_Feed_Item_Abstract {
    public function render() {
        //Custom rendering logic for a Photo
        return '<div>Watch my <a href="photo.php?id=' . $this->_item['source_id'] . '">photo</a></div>';
    }
}

class Application_Feed_Item_Follow extends Application_Feed_Item_Abstract {
    public function render() {
        //Custom rendering logic for a Follower
        return '<div>I got a new <a href="photo.php?id=' . $this->_item['source_id'] . '">follower</a></div>';
    }
}

这只是一个松散的实现方法。但正如另一位用户所说,根据您的需求,有许多不同的实现方法。您在问题中使用的方法会很好地工作

最明显的改进不是使用Unix时间戳,而是使用Unix时间戳。到目前为止,您遇到过任何问题吗?@Micheal为什么建议?@Micheal为什么?这真的取决于应用程序。我更喜欢时间戳,因为它以UTC格式存储所有内容。它还存储为CPU友好的32位整数。简单明了。可能是表示时间的最快数据类型。一些应用程序可能也想存储时区。我的应用程序在一个时区中工作,因此从未觉得有必要对于它。将来,你不应该通过编辑来改变你的问题。首先你要询问数据库结构,然后是数据显示。坚持一个问题——如果你有其他问题——发布一个新问题。你介意更深入地解释前两个问题吗?它们看起来很有趣。:)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​谢谢你,LIX。但是他们跟DIVE上传的DIV相比会有什么不同,例如,看看它们看起来有什么不同吗?当我生成页面的时候,我怎么能做到它,如果Soal=照片上传,它会像这样显示,接下来显示它像上面的一个,所以考虑第一个OpTio。n、 通过这种方式,你只需检查到底是谁在请求数据,并给他们提供正确的html。因此,当加载页面时,你会给出建议。我会对一个文件进行ajax调用,该文件将在其中生成html文件,比如/stored/activity/activity_1.html,然后在需要时显示。我对类和OOP非常陌生,但我对u进行了很好的尝试了解您的代码,如果您没有收到我的回复,请发送帮助。但说真的,我需要一段时间来解决这个问题,因为它看起来很完美!您能给我一个$feedtypes应该是什么样子的示例,以便我可以在测试环境中试用代码吗?
//Pull items from database and store them as an Array or other iterable object.
//Here i assume we call this collection of rows from the database $feeditems

//Mapping of source to renderer classes
$types = array(
    "photoupload" => "Application_Feed_Item_Photo",
    "follow" => "Application_Feed_Item_Request",
    "somethingelse" => "Application_Feed_Item_Somethingelse"
);

//Process every item
foreach($feeditems as $item) {
    $type = $item['source'];
    if(!array_key_exists($type, $types)) {
        throw new Exception("Unsupported feeditem type.");
    }
    $type = $types[$type];

    $renderer = new $type($item);
    echo $renderer->render();
}