我有一个管理面板,可以查看从名为“users”的数据库表中获取的所有用户信息。
有一个搜索框,我使用活动记录来获取数据。但这似乎有一个问题,我无法弄清楚。我很确定它在
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',它不属于用户表的一部分,因此我添加了键['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
获得相同值的正常行为吗?
最后,因为我真的迷失了这里,如果有人可以提供帮助或建议可能导致此问题的原因,我将非常感激。
我在ellislab论坛找到了类似codeigniter和or_like问题的答案https://ellislab.com/forums/viewthread/185983/ 而不是使用
$this->db->like('location', $your_string);
用途:
$this->db->where('location LIKE', '%'.$your_string.'%');
和 or_where 而不是 or_like。