【发布时间】:2013-11-20 08:03:05
【问题描述】:
我试图从数据库 6 中提取最新事件的函数。然后我想测试事件是否通过某个参数相互关联(我已经弄清楚了这个函数),但是想从数组中删除重复并添加下一个最近的事件。
例如,假设我有事件 #1-6。事件#3 与事件#1 相关。然后我想从数组中删除事件#3,然后添加到数组事件#7。完成后,我想检查事件 #1、2、4、5、6、7 以确保不再重复。我正在尝试继续这个过程,直到每个事件都是独一无二的。
这是我当前的代码:
public function get_user_events($limit=6, $offset= 0)
{
$user = $this->ion_auth->user()->row();
$event = $this->db->order_by("time_initiated","desc")
->get_where("events",array("user_id" => $user->id), $limit, $offset)
->result_array();
$noduplicates = FALSE;
while(!$noduplicates) {
foreach ($event as $a) {
if(test_if_repeated($a, $event)) { remove from array; $noduplicates = true }
}
// somehow need to refresh the list to get that 7th element
}
return $event;
}
【问题讨论】:
-
您应该以这样一种方式存储事件之间的关系,以便您的关系数据库管理系统可以轻松确定哪些是“重复”的其他。那么此操作将涉及单个查询,并且不需要将不必要的数据昂贵地传输到 PHP 进行进一步检查,然后才被丢弃。
-
目前我的数据库中有它,因此每个事件都有一个字段,其中包含上一个事件和下一个事件的 id,创建相关事件的链接列表。有什么方法可以帮助我,或者有什么其他方法可以建议您更改数据库?
-
与其他一些 RDBMS 不同,MySQL 不支持递归函数 - 因此它不太适合用于存储分层数据的“邻接表”模型;请考虑“嵌套集”或“传递闭包”模型。
-
这个问题只针对产品的一小部分,只需要在一个地方使用。完全改变数据库的结构会很不方便。您知道临时解决方法吗?
-
您可以存储每个层次结构的“根”事件而不是(或附加于)其相邻父级:添加新记录时,只需从直接父级复制根值。然后,在这种情况下,您的问题将简化为过滤那些作为它们自己的根的事件。
标签: javascript php jquery mysql codeigniter