У меня есть административная панель с просмотром всей информации о пользователях, полученной из таблицы базы данных с именем «users».
Там есть окно поиска, и я использую Active records для извлечения данных.Но, похоже, проблема в этом, и я не могу понять это.Я почти уверен, что он в части 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%'
itговорит, что группы - это неизвестный столбец, и его нет в списке выбора, но я не уверен, что это реальная проблема, потому что я на самом деле вижу группы и у меня есть интерфейс в админ-панели.Кроме того, будучи нубом 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
для получения того же значения?
И в конце, потому что я действительно потерян здесь, если кто-то может помочь или предложить, что может вызвать эту проблему, будет очень признателен.