![]() |
|
Модераторы: skyboy |
![]()
|
|
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Подскажите, как осуществить запрос по заданному интервалу
Допустим, имеется некая таблица table_01, из которой необходимо выбрать записи, ID которых равны, например от 15 до 45 (т.е. с 15 по 45 строку в таблице). Интервалы для запроса, при этом передаются из формы из двух разных элементов <input type=text> в переменных $ID_1 и $ID_2 |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 2 Всего: 43 |
Select ..... where id between 15 and 45
|
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Чтож, очень хорошо. А если немного усложнить задачу?
Например, у нас имеется таблица people, в которой имеются некоторые записи: ------------------------------------------------------- ID Name Age Job ------------------------------------------------------- 1 Алекс 23 дизайнер 2 Ника 25 модельер 3 Сэм 31 менеджер 4 Макс 28 юрист ------------------------------------------------------- также имеется форма, из которой подается запрос на поиск по имени (Name), возрасту (Age) и профессии (Job), который будет выглядеть примерно так: SELECT * FROM people WHERE Name LIKE '%$name%' and ....... and Job LIKE '%$job%' а теперь мне хотелось бы узнать, как дописать данную строку запроса (что вписать вместо ....) при условии, что выборка по возрасту производится в интервале от и до из переменных с формы $age1 и $age2 |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Да, и еще одна оговорка, поле Age в базе обязательно должно иметь числовой формат, или вполне хватит текстового?
Или если формат текстовый, нужно ли его преобразовывать в числовой, и как это сделать "безболезненно" для имеющихся уже данных? |
|||
|
||||
| Devorior |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 559 Регистрация: 1.8.2002 Где: Обнинск Репутация: нет Всего: 3 |
SELECT * FROM people WHERE Name LIKE '%$name%' and ....... and Job LIKE '%$job%' AND (id BETWEEN $age1 AND $age2)
|
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Devorior, огромное спасибо за подсказку, выглядит вполне логично, но результат поиска не выводит, хотя и сообщение об ошибке не выдает. Может здесь дело в синтаксисе?
|
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Я попробовал другую конструкцию типа:
age >= $age1 AND age <= $age2 - это банально и логично, но тоже не работает, чавой-то, несмотря на то, что поле age является INT |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
А как выглядит полный запрос? Может, не в этом дело...
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Полный запрос выглядит примерно так:
$query="SELECT * FROM `people` WHERE lastname LIKE '%$last_name%' and name LIKE '%$name%' and town LIKE '%$s_town%' and job_title LIKE '%$job_title%' and sex LIKE '%$s_sex%' and education LIKE '%$s_education%' and stage LIKE '%$s_stage%' and employment LIKE '%$s_employment%' and sitizenship LIKE '%$s_sitizenship%' and address LIKE '%$address%' and (age BETWEEN '$age1' AND '$age2') ORDER BY `ID`"; |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
Попробуй так:
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Судя по коду, я понимаю, что сообщение должно было бы появиться в окне браузера. Но никакого сообщения нет!
|
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
Тогда, насколько я понимаю, скорее всего просто нет записей, удовлетворяющих данным условиям. mysql_num_rows() ввозвращает ноль?
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
И еще: полезно будет просто посмотреть, как выглядит запрос в конечном варианте. Т.е. когда все PHP-шные переменные в запросе будут заменены на значения.
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
То-то и оно, MuToGeN, что запрос, который я послал - в первоначальном виде, только немного укорочен за ненадобностью. Причем все в запросе, исключая часть с полем age работает на ура. И еще, даже когда я ввожу в обе переменных одинаковые значения, равные значению искомой записи (которая на 100% существует), все равно выводится нулевой результат. этом случае речь даже не идет об интервалах. Видимо просто дело в самой конструкции.
А ты как считаешь? |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
Какая-то непонятная проблема... Все должно прекрасно работать, если значения подставляются в нормальном виде.
Может, переместить топик в раздел по БД? -------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Может у меня просто Apache и MySQL как-то криво сконфигурированы, потому, что я не первый раз сталкиваюсь с подобными проблемами, когда казалось бы все должно безупречно работать, приходится искать какие-то хитрые уловки.
Всю платформу для разработки я взял из комплексного пакета Denver2, по-моему с сайта www.dklab.ru, если не ошибаюсь. Может все-таки стоит еще раз обратить внимание на синтаксис запроса. Я полагаю, что в этой части запроса ...and (age BETWEEN '$age1' AND '$age2') ORDER BY ..., не совсем корректно расставлены кавычки. Что скажешь? |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
Попробуй сделать просто выборку типа
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Ты прав, MuToGeN, твой простой пример сработал, т.е. явно указанный константами интервал - действует.
Причина в передаче переменных $age1 и $age2. Нужно работать над синтаксисом, видимо здесь собака зарыта! Синтаксис типа ...and (age BETWEEN '$age1' AND '$age2') ORDER BY ... здесь точно не работает |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Сильно каюсь, ибо я ввел в заблуждение и себя и тебя. Дело в том, что код сенария у меня находится в стадии отладки. И в коде имеется много всякого закоментированного "мусора", как на зло одна из "лишних" строк случайно раскоментировалась, незаметно для меня, поэтому я даже не "шарил" по всему коду в поисках подобных косяков.
Я устранил причину конфликта, и теперь все работает отлично. Мне не понятно только одно, почему интерпретатор не выдавал сообщение об шибке? Именно это и загнало меня в тупик. |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
BlackHawk, проверь, как выглядит запрос после подставления значений переменных, т.е. на той стадии, когда он из ...(age BETWEEN '$age1' AND... уже превратился, например, в ...(age BETWEEN '24' AND...
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Ты абсолютно прав, MuToGeN,
я заметил еще вчера, что после подстановки значений из формы запрос на выборку интервала работает безукоризненно. Но есть одно огромное "НО": он блокирует сам собой весь остальной запрос, кстати конструкция типа (age>=$age1 AND age<=$age2) работает точно также. Если подставить перед скобкой OR вместо AND, то весь запрос начинает работать, кроме части запроса по интервалу (в этом случае он "вываливает" все значения, независимо от установленного интервала). |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
Ну проверь тогда, чему равны $age1 и $age2, т.е. пропиши перед строкой $query=.... такую вещь: echo "age1: $age1, age2: $age2<br />";. Не удивлюсь, если вылетит age1: 0, age2: 0
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Нет, MuToGeN, дело немножко не в этом. Данные в вышеуказанных переменных передаются замечательно и выборка по интервалу производится безупречно, но остальная часть запроса блокируется и совсем не реагирует на переменные, передаваемые с формы, хотя я уверен на все 100%, что абсолютно все переменные передаются одинаково хорошо, будь то переменные интервала возраста или имени или профессии и т.д.
Я все переменные проверил через echo. Проблема состоит в том, что в запросе $query="SELECT * FROM people WHERE lastname LIKE '%$last_name%' and name LIKE '%$name%' and town LIKE '%$s_town%' and job_title LIKE '%$job_title%' and sex LIKE '%$s_sex%' and education LIKE '%$s_education%' and address LIKE '%$address%' and (age BETWEEN '$age1' AND '$age2') ORDER BY `ID`"; выражение and (age BETWEEN '$age1' AND '$age2') блокирует весь остальной запрос, но если его удалить, то весь запрос работает отлично! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Может все дело во взаимосвязи с конструкцией визуального вывода результата?
Код визуального вывода результата немного "большеват", но в оригинале выглядит так: $list=mysql_query($query); for($i=0; $i<@mysql_num_rows($list); $i++) { $r=mysql_fetch_array($list); echo "<tr><td width='50%' bgcolor='3163BD'><TABLE><TR><TD width='1%'><img src='img/style/05.gif'></TD><TD width='99%' height='25'><font face='verdana' size='1' color='ffffff'><b>",@$r[lastname]," ",@$r[name]," ",@$r[surname],", ",@$r[age]," ",@лет,"</b></font></TD></TR></TABLE></td><td width='50%' align='right' bgcolor='3163BD' height='25'><img src='img/style/titlebg.gif'>", "</td></tr><tr class='text'><td background='img/style/bg03.gif' colspan='2'>", "<font face='verdana' color='9cc2e4' size='1'><b>","Общая информация: ", "</b></font></td></tr><tr class='text'><td background='img/style/bg04.gif' colspan='2'>", "<font face='verdana' color='151E27' size='1'><b>","Кандидат на вакансию: ", "</b></font>" , @$r[job_title],"</td></tr><tr class='text'><td background='img/style/bg04.gif' width='30%'>", "<font face='verdana' color='151E27' size='1'><b>","Образование: ", "</b></font>" , @$r[education],"</td><td width='70%' background='img/style/bg04.gif'>",@$r[ed_story],"</td></tr><tr class='text'><td background='img/style/bg04.gif' width='30%'>", "<font face='verdana' color='151E27' size='1'><b>","Опыт работы: ", "</b></font>" , @$r[stage],"</td><td background='img/style/bg04.gif' width='70%'>",@$r[text],"</td></tr><tr class='text'><td background='img/style/bg04.gif' width='30%'>", "<font face='verdana' color='151E27' size='1'><b>","Занятость: ", "</b></font>" , @$r[employment],"</td><td background='img/style/bg04.gif' width='70%'>", "<font face='verdana' color='151E27' size='1'><b>","График работы: ", "</b></font>" , @$r[work_grafic],"</td></tr><tr class='text'><td background='img/style/bg04.gif' colspan='2'>", "<font face='verdana' color='55A3FF' size='1'><b>","Желаемый уровень заработной платы: ", "</b></font>" , " от ", @$r[payment], "$", "</td></tr><tr class='text'><td background='img/style/bg04.gif' colspan='2'>", "<font face='verdana' color='326595' size='1'><b>","Гражданство: ", "</b></font>" , @$r[sitizenship], " ", @$r[another_sitiz], "</td></tr><TR height='10'><TD colspan='2' background='img/style/bg04.gif'>", " " ,"</TD></TR><tr class='text'><td background='img/style/bg03.gif' colspan='2'>", "<font face='verdana' color='9cc2e4' size='1'><b>","Контактная информация: ", "</b></font></td></tr><tr class='text'><td background='img/style/bg04.gif' colspan='2'>", "<font face='verdana' color='151E27' size='1'><b>","Место проживания: ", "</b></font>" ,@$r[town]," ",@$r[another_town],", ",@$r[address],", станция метро (г. Москва): ",@$r[metro],"</td></tr><tr class='text'><td background='img/style/bg04.gif' colspan='2'>", "<font face='verdana' color='151E27' size='1'><b>","Телефон: ", "</b></font>" ,@$r[telephone],"</td></tr><tr class='text'><td background='img/style/bg04.gif' colspan='2'>", "<font face='verdana' color='151E27' size='1'><b>","E-mail: ", "</b></font>" ,@$r[mail],"</td></tr><tr class='text'><td background='img/style/bg03.gif' colspan='2'>", "<font face='verdana' color='9cc2e4' size='1'><b>","Дополнительная информация: ", "</b></font></td></tr><tr class='text'><td background='img/style/bg04.gif' width='30%'>", "<font face='verdana' color='151E27' size='1'><b>","Пол: ", "</b></font>" , @$r[sex],"</td><td width='70%' background='img/style/bg04.gif'><font face='verdana' color='151E27' size='1'><b>","Семейное положение: ", "</b></font>" ,@$r[family],"</td></tr><tr class='text'><td background='img/style/bg04.gif' colspan='2'>", "<font face='verdana' color='151E27' size='1'><b>","Группа в базе: ", "</b></font>" ,@$r[chapter],"</td></tr><tr class='text'><td background='img/style/bg04.gif' colspan='2'>", "<font face='verdana' color='151E27' size='1'><b>","Знание иностранного языка: ", "</b></font>" ,@$r[lang],"</td></tr><tr class='text'><td background='img/style/bg04.gif' width='30%'>", "<font face='verdana' color='ff0000' size='1'><b>","Личный ID соискателя: ", "</b></font>" , @$r[ID],"</td><td width='70%' background='img/style/bg04.gif'><font face='verdana' color='151E27' size='1'><b>","Дата и время внесения резюме: ", "</b></font>" ,@$r[data],"</td></tr><TR height='40'><TD>" , "</TD></TR>"; } echo "</table>"; |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Я убрал все @ из сценария, мне пришлось только в части визуального вывода в квадратных скобках имена полей взять в одинарные кавычки (иначе интерпретатор выдает: "undefined variable ...."), а в целом все работает точно также !!!
|
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
мдя... вообще, чтоб точно убедиться, в чем проблема - в выводе данных или в MySQL, возьми пример запроса с подставленными данными и прогони его, например, через phpMySQLAdmin
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
phpMySQLAdmin у меня нет, но вместе с Денвером установилась phpMyAdmin.
Я ввожу пример своего запроса в режиме SQL в phpMyAdmin, в ответ получаю: "Your SQL-query has been executed successfully!", но результата выборки я не вижу! Вот в чем беда! |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
А как запрос выглядит, который в phpMyAdmin-e вводил?
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Я попытался максимально упростить вывод результата:
$list=mysql_query($query); for($i=0; $i<mysql_num_rows($list); $i++) { $r=mysql_fetch_array($list); echo "$r['lastname'], $r['name'], $r['surname'], $r['age']","<br>"; } но получил тот же эффект: выводятся пустые значения !!! |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
На подобный случай, кстати, есть функция print_r()
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
SELECT * FROM resume WHERE lastname LIKE 'Морозов' and name LIKE 'Игорь' and town LIKE 'Москва' and (age BETWEEN '1' AND '100') ORDER BY `ID` |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Через print_r() тоже ничего не выводит!!!
|
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
Создал у себя табличку resume, ввел туда этого самого Игоря Морозова из Москвы, кинул твой запрос, MySQL ряд выбрала без проблем. Может, в самой MySQL какие проблемы... Я на линуховом сервере тестил.
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
У меня платформа под Win32, может в ней какой-то косяк?
|
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
Может быть, в версии MySQL под винды.
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
Модератор: перемещено в БД из PHP
Авось, там кто-нибудь что-нибудь подскажет... -------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 1 Всего: 207 |
Age - должен быть без кавычек
Id - тоже должно быть без кавычек Like - как ты его написал работать не будет(точнее будет работать не как LIKE, а как точное соответствие) - нужно поставить WildCard В общем примерно так: SELECT * FROM resume WHERE lastname LIKE '%Морозов%' and name LIKE '%Игорь%' and town LIKE '%Москва%' and (age BETWEEN 1 AND 100) ORDER BY ID -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Огромное тебе спасибо, Vit, ты абсолютно прав, не зря я грешил на синтаксис кавычек!
|
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
Vit, BlackHawk, кстати говоря, я это дело тестил с age в кавычках - оно прекрасно работало. Может быть, дело в версиях MySQL...
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Кстати говоря,
я уже склоняюсь ко мнению MuToGeN, мой MySQL что-то просто с ума сошел! Вчера все работало просто трекрасно, но только без кавычек! Сегодня и без кавычек уже не работает!!! Выдает: MySQL query error. Query was: SELECT * FROM resume WHERE lastname LIKE '%%' and name LIKE '%%' and town LIKE '%%' and another_town LIKE '%%' and chapter LIKE '%%' and job_title LIKE '%%' and sex LIKE '%%' and education LIKE '%%' and stage LIKE '%%' and work_grafic LIKE '%%' and employment LIKE '%%' and sitizenship LIKE '%%' and another_sitiz LIKE '%%' and address LIKE '%%' and (age BETWEEN AND ) and (payment BETWEEN AND '1000000') ORDER BY ID MySQL returned: 1064: You have an error in your SQL syntax near 'AND ) and (payment BETWEEN AND '1000000') ORDER BY ID' at line 1 Я просто В ОСАДОК ВЫПАЛ!!! Никак не пойму в чем же тут дело, может просто Денвер переставить? |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 1 Всего: 207 |
Правильно говорит: (payment BETWEEN AND '1000000') - должно быть так
(payment BETWEEN 10 AND 1000000) -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 1 Всего: 207 |
Да работало, но сравнение строк и сравнение чисел это разные вещи Для строки '001' и '100' значение '99' не входит в интервал, а если указывать без кавычек, т.е. сравнивать числа 99 будет входить. Кавычки придумали вовсе не для того чтобы путались, а для того чтобы отличать когда пишешь число 100 от строки '100' - если у тебя поле текстовое то надо писать в кавычках, а если поле типа int то надо писать без кавычек, если ты всё-таки возьмёшь в кавычки - то кверя работать будет и даже иногда будет давать правильные результаты, но это с 99% вероятностью источник ошибок, поэтому нельзя относится к расстоновке кавычек как простому требованию синтаксиса, кавычки несут смысловую нагрузку, и пока ты не начнёшь их употреблять обдуманно ты будешь получать неправильные результаты. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| MuToGeN |
|
||||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
Vit, согдасен с тобой.
Короче, $age1 и $age2 - нулевые строки. Либо значения где-то теряются, либо просто не передаются при HTTP запросе. -------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
||||
|
|||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Хорошо, Vit, я все отлично понял, что выражение помещенное в кавычки воспринимается как строка. Но когда в вышеуказанном запросе я убираю кавычки, вот что получается!
Я никак не понимаю, в чем тут дело, ведь все же правильно!!! Я уже и MySQL поставил v.4.0.3 - результат тот же!!! Пробовал и под Win98 под WinXP - результат абсолютно одинаков. Может дело в чем-то другом. Но самая главная странность в том, что вчера все отлично работало, а сегодня как я ни пытался ее оживить - безрезультатно!!! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Ты прав, Vit,
если интервал указать числовыми константами, то все работает отлично. Значит переменные теряются где-то при передаче данных из формы. Но как же быть в этом случае? Как выстроить синтаксис запроса? Что посоветуешь? Или может быть для начала мне переименовать злополучные переменные на форме? |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| BlackHawk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 15.8.2003 Репутация: нет Всего: нет |
Переменные теряются именно в скобках, причем наблюдается довольно странная вещь: если перед каждой теряющейся переменной поставить знак "@", то интерпретатор говорит, что эти переменные не идентифицированы!? Но как? Ведь перед ними и так стоит знак отключения предупреждений! Причем заключать в кавычки эти переменные нельзя, иначе они будут восприниматься как строка и поэтому не смогут сравниваться друг с другом, соответственно и результат будет нулевой.
|
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
BlackHawk, когда ты заключаешь их в кавычки, то получается age BETWEEN '' AND ''.
Это так и так не поможет, тут даже не в этом дело. Пославь в самом начале и конце скрипта print_r($_REQUEST); и сравни то, что оно выдаст - в начале и в конце. И вообще это тоже тема для нового топика... MySQL тут уже не причем... -------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| knave |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 6.3.2003 Где: Санкт-Питербург ( Россия) Репутация: нет Всего: 5 |
вконце строки запроса полставь limit <start>, <count>
<start> - номер первой строки <count> - количесто строк Так обычно делают когда надо выбирать несколько строк (например для организации страничного просмотра данных на сайте - типа как в поисковиках) -------------------- С наилучшими пожеланиями !!! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |