Пользовательский ORDER BY на основе соответствующего поля с использованием построителя запросов CodeIgniter.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Пользовательский ORDER BY на основе соответствующего поля с использованием построителя запросов CodeIgniter.

Сообщение Anonymous »

Я решил, что мне нужно поле поиска на своем веб-сайте, но у меня нет никаких знаний об алгоритмах поиска. Поле поиска работает так, как будто вы можете ввести любое количество имен (имя пользователя, имя, фамилия) или адресов электронной почты, разделяя их пробелом. Итак, используя класс активной записи codeigniter, я придумал следующее (это очень просто):

Код: Выделить всё

$emails = FALSE;
$names = FALSE;

foreach ($search_array as $value) {
if (valid_email($value)) {
$emails[] = $value;
} else {
$names[] = $value;
}
}

if ($emails) {
$this->db->where_in('email', $emails);
if ($names) {
$this->db->or_where_in('username', $names);
$this->db->or_where_in('firstname', $names);
$this->db->or_where_in('lastname', $names);
}
} else {
if ($names) {
$this->db->where_in('username', $names);
$this->db->or_where_in('firstname', $names);
$this->db->or_where_in('lastname', $names);
}
}

$this->db->select('id, username, firstname, lastname');
$query = $this->db->get('users');

if ($query->num_rows() > 0) {
return $query->result();
}

return FALSE;
Этот код выполняет несколько операторовwhere, а затем просто отправляет их обратно.
Возможно, я мог бы очистить операторы if и то, как работает электронная почта, но это не главное. Этот код работает отлично (по крайней мере, с очень маленькой базой данных :P), но я хочу, чтобы он делал больше:
  • Прямо сейчас вам нужно ввести правильное имя или адрес электронной почты, чтобы получить хороший результат. Если вы почти правы, было бы неплохо получить несколько предложений, но я, вероятно, смогу разобраться в этом сам, поставив лайк.
  • Я хочу отсортировать весь массив результатов, и вот здесь я спотыкаюсь. Поскольку и адрес электронной почты, и имя пользователя уникальны, я хочу, чтобы поиск отображался с использованием следующих приоритетов:
  • Электронная почта
  • Имя пользователя
  • Имя + Фамилия
  • Имя
  • Фамилия
На данный момент меня не волнует, например, адрес электронной почты+имя пользователя+имя+фамилия, так как я считаю, что это было бы перебором.
Я нашел эту тему Поисковый запрос, приоритет «упорядочить по», но поскольку я не знаю, что именно в моем поиске, это мне не помогло, но, возможно, я мог бы что-нибудь использовать похоже?
Ребята, вы вообще знаете, как решить приоритетную задачу? Возможно, я пропустил некоторые важные функции, которые могли бы помочь? А что произойдет, когда моя база данных станет большой?

Подробнее здесь: https://stackoverflow.com/questions/676 ... ry-builder
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»