Enhill Опубликовано 21 января, 2013 Жалоба Поделиться Опубликовано 21 января, 2013 Нынешний поиск умеет искать только по одной выбранной таблице: name, phone и тд. Запрос, отвечающий за поиск выглядит так:api/Orders.tpl$keyword_filter .= $this->db->placehold('AND o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');Вопрос: как изменить структуру запроса, для поиска одновременно по нескольким таблицам, например 'name' и 'phone' ?UPD: Cпасибо delprofile !Заработал поиск и по телефону и по имени с такой конструкцией$keyword_filter .= $this->db->placehold('AND o.phone LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');$keyword_filter .= $this->db->placehold('AND o.phone OR o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" '); Цитата Ссылка на сообщение Поделиться на другие сайты
Only Опубликовано 21 января, 2013 Жалоба Поделиться Опубликовано 21 января, 2013 $keyword_filter .= $this->db->placehold('AND o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" AND o.phone LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" '); Цитата Ссылка на сообщение Поделиться на другие сайты
Enhill Опубликовано 21 января, 2013 Автор Жалоба Поделиться Опубликовано 21 января, 2013 Спасибо за ответ, но не отрабатывает.Полный листинг стандартного запроса:if(!empty($filter['keyword'])) { $keywords = explode(' ', $filter['keyword']); foreach($keywords as $keyword) $keyword_filter .= $this->db->placehold('AND o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" '); } Цитата Ссылка на сообщение Поделиться на другие сайты
delprofile Опубликовано 21 января, 2013 Жалоба Поделиться Опубликовано 21 января, 2013 AND o.name LIKEAND o.name OR o.хрен OR o.член LIKE Цитата Ссылка на сообщение Поделиться на другие сайты
Enhill Опубликовано 22 января, 2013 Автор Жалоба Поделиться Опубликовано 22 января, 2013 delprofile Спасибо! Запрос отрабатывает, но не выводит результат.При такой конструкции:$keyword_filter .= $this->db->placehold('AND o.phone OR o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" '); при поиске по имени выводит количество найденных заказов, но сами заказы не показывает, а выводит просто все заказы. Если искать по телефону, пишет заказы не найдены.При такой конструкции:$keyword_filter .= $this->db->placehold('AND o.name OR o.phone LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');При поиске по телефону пишет что заказы не найдены, но все таки выводит найденные правильно заказы (парадокс). Если искать по имени, то пишет кол-во найденных заказов, но заказов не выводит. Цитата Ссылка на сообщение Поделиться на другие сайты
Enhill Опубликовано 22 января, 2013 Автор Жалоба Поделиться Опубликовано 22 января, 2013 Прошу прощения за свои кривые руки. Ещё раз спасибо delprofile Заработал поиск и по телефону и по имени с такой конструкцией$keyword_filter .= $this->db->placehold('AND o.phone LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" ');$keyword_filter .= $this->db->placehold('AND o.phone OR o.name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" '); Цитата Ссылка на сообщение Поделиться на другие сайты
zloydemon Опубликовано 29 января, 2013 Жалоба Поделиться Опубликовано 29 января, 2013 Ребят а подскажите куда это вставлять? Цитата Ссылка на сообщение Поделиться на другие сайты
Hubble Опубликовано 29 января, 2013 Жалоба Поделиться Опубликовано 29 января, 2013 а если номер клиента будет в формате 050-000-50-50, найдет? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 29 января, 2013 Жалоба Поделиться Опубликовано 29 января, 2013 Проверте, или вы думаете, кто-то особо заморачивался ЮМСи? Цитата Ссылка на сообщение Поделиться на другие сайты
Hubble Опубликовано 29 января, 2013 Жалоба Поделиться Опубликовано 29 января, 2013 Если в заказе между цифрами дефис или пробел, то номер не находит Цитата Ссылка на сообщение Поделиться на другие сайты
delprofile Опубликовано 29 января, 2013 Жалоба Поделиться Опубликовано 29 января, 2013 дак чтоб не фанится можно вырезать при добавлении все символы кроме цифорок (= preg_match вам в помощь Цитата Ссылка на сообщение Поделиться на другие сайты
Enhill Опубликовано 29 января, 2013 Автор Жалоба Поделиться Опубликовано 29 января, 2013 Для того, что бы убрать лишние символы из телефона, еще на стадии заказа, добавляем в view/CartViewпосле$order->phone = $this->request->post('phone');добавим$order->phone = preg_replace('/[^\d,]+/', '', $order->phone); Цитата Ссылка на сообщение Поделиться на другие сайты
JustDavali Опубликовано 29 января, 2013 Жалоба Поделиться Опубликовано 29 января, 2013 А я наоборот во всех формах где вводится телефон применил скрипт ввода по маске +7(911)123-34-34 Цитата Ссылка на сообщение Поделиться на другие сайты
Rash Опубликовано 30 января, 2013 Жалоба Поделиться Опубликовано 30 января, 2013 JustDavali, поделись пожалуйста решением как правильно сделать. спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
JustDavali Опубликовано 30 января, 2013 Жалоба Поделиться Опубликовано 30 января, 2013 скрипт jquery.maskedinput-1.3.jshttp://www.xiper.net/collect/js-plugins/ui/masked-input-plugin.html Цитата Ссылка на сообщение Поделиться на другие сайты
antin Опубликовано 18 декабря, 2014 Жалоба Поделиться Опубликовано 18 декабря, 2014 Добрый день.Подскажите где это править? Цитата Ссылка на сообщение Поделиться на другие сайты
snappk Опубликовано 29 ноября, 2018 Жалоба Поделиться Опубликовано 29 ноября, 2018 Подскажите, а как добавить возможность поиска еще и по email, а то при поиске , убираеться с названия почты символ "@" и не хочет работать.$keyword_filter .= $this->db->placehold('AND o.id OR o.email LIKE "%'.$this->db->escape(trim($keyword)).'%" '); - так не работает. Цитата Ссылка на сообщение Поделиться на другие сайты
snappk Опубликовано 29 ноября, 2018 Жалоба Поделиться Опубликовано 29 ноября, 2018 Нашел решение сам, в файле api/reguest.php необходимо написать: return strval(preg_replace('/[^\p{L}\p{Nd}\d\@\s_\-\.\%\s]/ui', '', $val)); Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 29 ноября, 2018 Жалоба Поделиться Опубликовано 29 ноября, 2018 Нашел решение сам, в файле api/reguest.php необходимо написать: return strval(preg_replace('/[^\p{L}\p{Nd}\d\@\s_\-\.\%\s]/ui', '', $val));Зря вы реквест трогали... Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 29 ноября, 2018 Жалоба Поделиться Опубликовано 29 ноября, 2018 Зря вы реквест трогали... Почему зря? Можете привести хоть один недостаток, который возникнет из-за этого решения? Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 29 ноября, 2018 Жалоба Поделиться Опубликовано 29 ноября, 2018 Почему зря? Можете привести хоть один недостаток, который возникнет из-за этого решения?Для тебя не буду ничего писать, возможно ты и сам в состоянии и хватает скиллов понять почему так делать не стоит. Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.