我有一个管理面板,其中包含从名为“users”的数据库表中获取的所有用户信息的视图。
有一个搜索框,我使用Active记录来获取数据。但似乎有一个问题,我无法弄清楚。我很确定它在or_like
部分,但错误使我感到困惑。
这是我通过一个变量$data
从搜索框发布信息的查询:
public function get($data) {
$this->db->select('id, email, firstname, lastname, usertype, ts_created, ts_last_login, position');
if (isset($data['query']) && $data['query'] != '') {
$fields = json_decode($data['fields'], true);
$this->db->like($fields[0], $data['query']);
foreach ($fields as $field) {
$this->db->or_like($field, $data['query']);
}
}
$this->db->limit($data['limit'], $data['start']);
if (isset($data['sort'])) {
$sort = json_decode($data['sort'], true);
$this->db->order_by($sort[0]['property'], $sort[0]['direction']);
}
$query = $this->db->get('users');
因为它有点是现有程序的重构,所以我不得不添加一个新功能 - 'groups',它不是users表的一部分,所以我添加键['groups'] =>带有循环查询的值结果:
$users = array();
foreach ($query->result_array() as $user) {
$users[] = array_merge($user, array('groups' =>''));
}
$count = sizeof($users);
//Adding groups id's as values to the group key
foreach ($this->getGroupsAndUsers() as $group) {
for ($i = 0; $i < $count; $i++) {
if ($users[$i]['id'] == $group['user_id']) {
//Begin check
if ($users[$i]['groups'] == '') {
$users[$i]['groups'] .= $group['group_id'];
} else {
$users[$i]['groups'] .= "," . $group['group_id'];
}
//End of check
}
}
}
$result = $users;
return $result;
将最终数组传递给$ result变量时,这应该是全部,但是当我尝试搜索某个用户时,我收到此错误:
<p>Error Number: 1054</p><p>Unknown column 'groups' in 'where clause'</p><p>SELECT `id`, `email`, `firstname`, `lastname`, `usertype`, `ts_created`, `ts_last_login`, `position`
FROM (`users`)
WHERE `firstname` LIKE '%stefan%'
OR `firstname` LIKE '%stefan%'
OR `lastname` LIKE '%stefan%'
OR `email` LIKE '%stefan%'
OR `position` LIKE '%stefan%'
OR `groups` LIKE '%stefan%'
它说组是未知列并且它在选择中缺失但我不确定这是真正的问题因为我实际上看到了组并且在管理面板中有一个UI。另外,作为一个MySQL菜鸟,我认为得到这样的查询有点奇怪:
WHERE `firstname` LIKE '%stefan%'
OR `firstname` LIKE '%stefan%'
OR `lastname` LIKE '%stefan%'
OR `email` LIKE '%stefan%'
OR `position` LIKE '%stefan%'
OR `groups` LIKE '%stefan%'
我的意思是,这是or_like
获得相同值的正常行为吗?
最后,因为我真的迷失在这里,如果有人可以提供帮助或建议可能会导致这个问题,那将非常感激。
答案 0 :(得分:0)
我在ellislab论坛https://ellislab.com/forums/viewthread/185983/找到了codeigniter like和or_like问题的答案 而不是使用
$this->db->like('location', $your_string);
使用:
$this->db->where('location LIKE', '%'.$your_string.'%');
和 or_where 而不是或_like 。