我开发了一个工具,根据表单中的输入,你可以从一个大表中获得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',
),
));
不符合我的意愿。此外,如果我不评论第一行("字段"),它只返回一个结果。BTW,$param2是用户的输入
编辑编辑:脏的解决方案。
我用了纳赛尔的方法。我不完全理解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个结果,它会返回随机结果。
一定是因为太晚了,但我真的不明白你想做什么。
但无论如何,既然你说find('neighbors')
"非常接近",我会给你一个自定义更改的选项,以满足你的需求。话虽如此,如果有人比我睡眠不足少,并为你提供了一个更有效的解决方案,那就接受吧
无论如何,解决方案是:建立一个自定义查找
Cake的文档解释了如何创建一个。这样做,一个find('lots-of-neighbors')
的发现。创建一个新的自定义查找似乎很简单,所以不想解释,如果你不理解其中的内容,你应该问一个新问题。
现在,在自定义查找函数中实际要放什么?好吧,复制find('neighbors')
函数并更改您需要的内容。我会给你代码的链接,尽管我没有你确切的cakepp版本,所以你应该仔细检查
据我所知,该函数唯一的问题是它只返回2条记录,因此您可能只需要更改条件内的limits
(第3143、3156、3160行)。
简而言之就是这样。如果这不是你想要的,我明天早上再试试。
这不是一个方便的方法,但可能对您有效-
$find_id = $this->Tweet->find('first', array(
'conditions' => array(
'Tweet.permalink' => $param2
)
)
);
现在我有了那张唱片的id。。。因此id是auto_increment,现在我可以使用>=
或<=
$tweets = $this->Tweet->find('all', array(
'conditions' => array(
'Tweet.id >=' =>$find_id['Tweet']['id']
),
'limit' => 10
)
);