我有一个搜索字段,但总是当我搜索一个名字时,它总是从顶部开始,我怎么能确保它是无字母的,根据用户输入的第一个字母。下面是我的模型代码
public function getName($id)
{
$select = $this ->select()
->where('service_provider_id = ?', $id)
->order('service_provider_name ASC')
->limit(20);
return $this->fetchRow($select);
}
try this:
$select = $this ->select()
->where('service_provider_id = ?', $id)
->where('service_provider_name LIKE ''%' . $first_letter . '''')
->order('service_provider_name ASC')
->limit(20);
在SQL中,可以这样做:
order by (case when service_provider_name >= 'F' then 0 else 1 end),
service_provider_name
你应该在'F'
的位置写上合适的字母。
这是标准的SQL,应该在所有引擎上运行。也许同样的方法也适用于Zend框架。
如果我理解正确的话,您正在按名称搜索。因此,您需要相应地更改代码。你想要实现的和模型中的函数不是内联的。例如,return $this->fetchRow($select);
将返回表中唯一匹配的原始数据,您再次执行->limit(20)
,您在这里限制了什么。函数的结果将始终是1 raw或none, order也是如此。我认为你想要按名字搜索考虑到第一个输入字母和顺序的结果,限制为20。试着把你的方法改成这样:-
public function searchByName()
{
$select = $this ->select();
$select ->where('service_provider_name LIKE ?', '%'.$service_provider_name)
->order('service_provider_name ASC')
->limit(0,20);
return $this->fetchAll($select);
}