【发布时间】:2014-04-22 18:25:04
【问题描述】:
我开发了一个工具,您可以根据表单中的输入从一个大表中获取 10 条记录。例如,如果表格有一列记录为“编号”,您可以输入一个数字,应用程序会将 10 条以下记录返回到该记录的编号。
这样做的目的是始终获取最新的 10 个输入从最后一次获取。
问题在于,AFAIK,没有办法在特定位置开始搜索的条件下进行查找。
找邻居很接近,但不幸的是它只返回两个结果:搜索的上一个和下一个。
有什么想法吗?
编辑:现在查询看起来像这样:
$data = $this->Tweet->find('all', array(
'field' => array('Tweet.permalink' => $param2),
'fields' => array('Tweet.embed'),
'limit' => 10,
'order' => array('Tweet.created' => 'desc'),
'contain' => false,
// 'offset' => 1,
'conditions' => array('not' => array('Tweet.embed' => null),
'Tweet.status' => 'approved',
),
));
没有按照我想要的方式工作。此外,如果我不评论第一行(“字段”),它只会返回一个结果。顺便说一句,$param2 是用户的输入
编辑编辑:肮脏的解决方案。
我使用了 Nunser 方法。我没有完全理解 findNeighbors 函数,但经过一些调试后,函数最终是这样的:
protected function _findNeighbors($state, $query, $results = array()) {
extract($query);
if ($state === 'before') {
$conditions = (array)$conditions;
if (isset($field) && isset($value)) {
if (strpos($field, '.') === false) {
$field = $this->alias . '.' . $field;
}
} else {
$field = $this->alias . '.' . $this->primaryKey;
$value = $this->id;
}
$query['conditions'] = array_merge($conditions, array($field . ' <' => $value));
$query['order'] = $field . ' DESC';
$query['limit'] = 10;
$query['field'] = $field;
$query['value'] = $value;
return $query;
}
return $results;
}
见 $query['limit'] = 10;场地?最初它仅限于一个结果,所以我添加了一个 0 并截断了以下代码,它构建了 prev 和 next 数组。我不知道它是如何得到这 10 个结果的,SQL 查询是如何构建的,但它确实有效!
它有一个错误:如果您进行查询并且您搜索的项目前面没有 10 个结果,它将返回随机结果。
【问题讨论】:
-
添加您的查询。可能有错字(如条件而不是条件)
-
'not' => array('Tweet.embed' => null)你可以改成'Tweet.embed !=' => null