如何使用flourishlib的fRecordSet构建方法与预览和保存进行交互?

时间:2013-12-15 05:06:02

标签: php mysql flourishlib

假设我有一个名为local_ads的数据库表。

现在,当创建本地广告时,必须能够查看其预览,如果他满意,则保存。此外,如果想要更新本地广告,那么他可能希望在覆盖记录的实时版本之前查看其预览。

因此,我有一个名为local_ads的{​​{1}}表的外键。如果这是null,那么它是预览(至少根据我最初的想法)。否则就是现场直播。当保存预览时,有两种情况:

案例1:没有与预览相关联的实时记录。在这种情况下,新记录将插入parent_id表中,local_ads指向预览。

案例2:有一个链接到预览的实时记录。在这种情况下,实时记录会更新。

一切看起来都很好,但我在网格中显示结果时遇到问题。如果不存在记录的实时版本,我想显示预览,如果存在则只显示实时版本。我想以

的精神展示一些东西
parent_id

但我有几个问题。我们有一个逻辑select col1, col2, col3, col4 from local_ads glob where (not (parent_id is null)) or ((select id from local_ads temp where temp.parent_id = glob.id limit 0, 1) is null) (我想知道如何使用蓬勃发展的or or方法在逻辑操作数之间使用逻辑build。此外,此查询有两个维度,它很慢。另外,我想知道如何执行子查询。另外,我不知道如何在fRecordSet中使用is运算符。

所以,我不得不重新思考我的想法,并想出了以下内容:

is null

这个想法很简单:如果预览没有实时版本,那么parent_id会匹配id,否则预览的parent_id为null。我知道这是一个丑陋的黑客,但这是我能想出来解决问题,降低内存和性能复杂性的最好主意。

因此,剩下的唯一问题是检查由逻辑select col1, col2, col3, col4 from local_ads where parent_id < id or parent_id >= id 分隔的where子句中的两个逻辑值。

从我看过的文档中可以看出:

or

和此:

 * 'column<:'                   => 'other_column'               // column < other_column

所以我知道如何将这些添加到过滤器中,但我应该如何'或'他们?

到目前为止,我已经尝试过这种方式:

 * 'column>=:'                  => 'other_column'               // column >= other_column

请注意,在某些情况下,我还必须检查域名。

1 个答案:

答案 0 :(得分:0)

与此同时,我设法解决了这个问题。这就是我们如何定义过滤器集来解决问题中提到的问题:

$filters = array();

if ($User->getType() == 'local_admin') {
  $filters['domain='] = $User->getDomain();
}

$filters['parent_id<:|parent_id>=:'] = array('id', 'id');