Помощник
|
Фильтрация посредством LIKE c несколькими условиями |
lesli007
|
Сообщение
#1
|
||
|
|
||
|
|||
matroskin8 |
21.8.2012, 18:02;
Ответить: matroskin8
Сообщение
#2
|
|
Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-2, 2' at line 1 В запрос с LIMIT попадает недопустимое значение... подозреваю, что отрицательное число либо ноль. Чтобы избежать этой ошибки пробуем вот в этот участок: // Находим общее число страниц $total = (($posts - 1) / $num) + 1; $total = intval($total); добавить условие: // Находим общее число страниц $total = (($posts - 1) / $num) + 1; $total = intval($total); if($total <= 0) $total = 1; А вообще мне больше импонирует гораздо более понятная формула получения кол-ва страниц: $total = ceil($posts/ $num); if(!$total) $total = 1; Как сделать жесткость в выборке? Сейчас подразумевается мягкий поиск при любом сопадении. А допустим пользователю нужен ноябрь 2012 а ему выдают все что есть по ноябрям и 2012 году переписать вот эту часть запроса: ...OR month LIKE '$month' OR year LIKE '$year' таким образом: ...OR (month LIKE '$month' AND year LIKE '$year') А вообще, конечно, жесть На относительно больших объемах данных Вы своими лайками сервер просто положите. Есть полнотекстовый поиск, который отработает мгновенно и гораздо больше будет уместен в Вашем случае... а LIKE используется немного в других случаях. |
|
|
lesli007
|
Сообщение
#3
|
|
[member=matroskin8], сейчас все попробую. Что за поиск есть?
|
|
|
matroskin8 |
21.8.2012, 18:54;
Ответить: matroskin8
Сообщение
#4
|
|
Вроде понятно написал:
полнотекстовый поиск
|
|
|
lesli007
|
Сообщение
#5
|
|
Сейчас пока организую на лайках. Потом если что поменяю. [member=matroskin8], Ваше решение помогло избавиться от ошибки. Большое спасибо! Скажите, пожалуйста, в чем может быт причина не поиска. Вот код
$result = mysql_query("SELECT * FROM tender WHERE title LIKE '$title' OR region LIKE '$region' OR agenstvo LIKE '$agenstvo' OR (month LIKE '$month' AND year LIKE '$year') ORDER BY date1 DESC LIMIT $start, $num",$db); if (!$result) { echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору1. <br> <strong>Код ошибки:</strong></p>"; exit(mysql_error()); } if (mysql_num_rows($result) > 0) { $myrow = mysql_fetch_array($result); } else {echo "По вашему запросу ничего не найдено";} Однако при незаполнении полей форм не происходит поиск. Типа ничего не найдено. А еще необходимо сделать очень жесткий поиск. То есть все AND вместо OR. Но в таком случае вообще не работает поиск. Видимо что то не так при ловле запросов POST. Нужно какое то условие при незаполненности полей формы или в запросе что то менять |
|
|
matroskin8 |
21.8.2012, 22:09;
Ответить: matroskin8
Сообщение
#6
|
|
Однако при незаполнении полей форм не происходит поиск. Логично, если нет данных для поиска - то ничего искать и не должно... или я чего-то упускаю? А еще необходимо сделать очень жесткий поиск. То есть все AND вместо OR. Но в таком случае вообще не работает поиск. Нужно понимать, что оператор AND требует обязательного соответствия того, что ищем, с тем, где ищем... всех составляющих предиката (условия) с соответствующими значениями полей. Например, в таблице имеются значения в полях №1-3: значение поля 1, значение поля 2, значение поля 3. В таком случае этот запрос: WHERE field1='значение поля 1' AND field2='значение поля 2' AND field3='значение поля 3'; выберет такую строку. Но если хотя бы одно из значений не совпадет с запросом, то такой ряд выбран не будет... например в таком случае: WHERE field1='значение поля 1' AND field2='значение поля 2' AND field3='значение поля 5'; -- в последнем условии стоит 5 вместо 3 Надеюсь, доступно объяснил... это я к тому, что запрос верный... ну а не ищет ничего потому, что критериям поиска не удовлетворяет ни одна строка из таблицы. |
|
|
lesli007
|
Сообщение
#7
|
|
[member=matroskin8],
[img]http://s2.ipicture.ru/uploads/20120822/8RorUwEz.jpg[/img] Смысл в фильтрации. Пользователь может выбрать все пукты, или же что то одно. Но если что то не за полнено - в POST летит пустота и при использовании AND не находится ничего |
|
|
matroskin8 |
22.8.2012, 8:17;
Ответить: matroskin8
Сообщение
#8
|
|
|
Если что-то не обязательно к заполнению, то для этого что-то AND использовать бессмысленно... а иначе - требуйте и проверяйте заполнение всех обязательных полей перед формированием заявки к БД.
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
FizzPartners - Gambling Партнерка с индивидуальными условиями, прямой рекламодатель. | 1 | AaronFizzPartners | 1600 | 23.7.2021, 18:14 автор: AaronFizzPartners |
|
PlayCash - гемблинг, беттинг партнерка с жирными условиями | 9 | Playcash | 2597 | 31.5.2021, 12:11 автор: Playcash |
|
Adspect — клоакинг, фильтрация ботов, антифрод На базе JS fingerprinting и машинного обучения |
2 | Adspect | 3238 | 13.8.2020, 14:32 автор: Adspect |
|
Печальный обзор Like.co/in/ | 1 | k0ttee | 50509 | 17.12.2019, 18:49 автор: k0ttee |
|
[Mobytize.com] - вкусные офферы со сладкими условиями - Make Money & Have Fun! | 26 | Mobytizecom | 3909 | 5.4.2019, 17:53 автор: Mobytizecom |
Текстовая версия | Сейчас: 20.4.2024, 14:49 |