Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MySQL запросы, выборка в пределах от ... до 
:(
    Опции темы
BlackHawk
  Дата 19.8.2003, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Подскажите, как осуществить запрос по заданному интервалу

Допустим, имеется некая таблица table_01, из которой необходимо выбрать записи, ID которых равны, например от 15 до 45 (т.е. с 15 по 45 строку в таблице). Интервалы для запроса, при этом передаются из формы из двух разных элементов <input type=text> в переменных $ID_1 и $ID_2


PM MAIL ICQ   Вверх
DENNN
Дата 19.8.2003, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 2
Всего: 43



Select ..... where id between 15 and 45
PM ICQ   Вверх
BlackHawk
  Дата 19.8.2003, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL ICQ   Вверх
BlackHawk
  Дата 19.8.2003, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Да, и еще одна оговорка, поле Age в базе обязательно должно иметь числовой формат, или вполне хватит текстового?
Или если формат текстовый, нужно ли его преобразовывать в числовой, и как это сделать "безболезненно" для имеющихся уже данных?
PM MAIL ICQ   Вверх
Devorior
Дата 19.8.2003, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 1.8.2002
Где: Обнинск

Репутация: нет
Всего: 3



SELECT * FROM people WHERE Name LIKE '%$name%' and ....... and Job LIKE '%$job%' AND (id BETWEEN $age1 AND $age2)
PM MAIL ICQ   Вверх
BlackHawk
Дата 20.8.2003, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Devorior, огромное спасибо за подсказку, выглядит вполне логично, но результат поиска не выводит, хотя и сообщение об ошибке не выдает. Может здесь дело в синтаксисе?
PM MAIL ICQ   Вверх
BlackHawk
Дата 20.8.2003, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Я попробовал другую конструкцию типа:

age >= $age1 AND age <= $age2 - это банально и логично, но тоже не работает, чавой-то, несмотря на то, что поле age является INT
PM MAIL ICQ   Вверх
MuToGeN
Дата 20.8.2003, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 20.8.2003, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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`";


PM MAIL ICQ   Вверх
MuToGeN
Дата 20.8.2003, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: нет
Всего: 32



Попробуй так:
Код

 $result=@mysql_query($query);
 $error=mysql_errno();
 if($error!=0)
 {
   $msg="MySQL query error.\nQuery was:\n$query\nMySQL returned:\n$error: ".
        mysql_error()."\n";
   echo nl2br($msg);
 }
и посмотри, что она скажет.


--------------------
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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 20.8.2003, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Судя по коду, я понимаю, что сообщение должно было бы появиться в окне браузера. Но никакого сообщения нет!
PM MAIL ICQ   Вверх
MuToGeN
Дата 20.8.2003, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
MuToGeN
Дата 20.8.2003, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 20.8.2003, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



То-то и оно, MuToGeN, что запрос, который я послал - в первоначальном виде, только немного укорочен за ненадобностью. Причем все в запросе, исключая часть с полем age работает на ура. И еще, даже когда я ввожу в обе переменных одинаковые значения, равные значению искомой записи (которая на 100% существует), все равно выводится нулевой результат. этом случае речь даже не идет об интервалах. Видимо просто дело в самой конструкции.

А ты как считаешь?
PM MAIL ICQ   Вверх
MuToGeN
Дата 20.8.2003, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
BlackHawk
  Дата 20.8.2003, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Может у меня просто Apache и MySQL как-то криво сконфигурированы, потому, что я не первый раз сталкиваюсь с подобными проблемами, когда казалось бы все должно безупречно работать, приходится искать какие-то хитрые уловки.

Всю платформу для разработки я взял из комплексного пакета Denver2, по-моему с сайта www.dklab.ru, если не ошибаюсь.

Может все-таки стоит еще раз обратить внимание на синтаксис запроса. Я полагаю, что в этой части запроса ...and (age BETWEEN '$age1' AND '$age2') ORDER BY ..., не совсем корректно расставлены кавычки. Что скажешь?

PM MAIL ICQ   Вверх
MuToGeN
Дата 20.8.2003, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: нет
Всего: 32



Попробуй сделать просто выборку типа
Код
SELECT * FROM table WHERE age BETWEEN 20 AND 30;
Кстати, конфиг апача тут точно не причем. Он только "передает управление" PHP парсеру, и с MySQL работает уже 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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 20.8.2003, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Ты прав, MuToGeN, твой простой пример сработал, т.е. явно указанный константами интервал - действует.
Причина в передаче переменных $age1 и $age2.
Нужно работать над синтаксисом, видимо здесь собака зарыта!

Синтаксис типа
...and (age BETWEEN '$age1' AND '$age2') ORDER BY ... здесь точно не работает
PM MAIL ICQ   Вверх
BlackHawk
Дата 20.8.2003, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Сильно каюсь, ибо я ввел в заблуждение и себя и тебя. Дело в том, что код сенария у меня находится в стадии отладки. И в коде имеется много всякого закоментированного "мусора", как на зло одна из "лишних" строк случайно раскоментировалась, незаметно для меня, поэтому я даже не "шарил" по всему коду в поисках подобных косяков.

Я устранил причину конфликта, и теперь все работает отлично. Мне не понятно только одно, почему интерпретатор не выдавал сообщение об шибке? Именно это и загнало меня в тупик.
PM MAIL ICQ   Вверх
MuToGeN
Дата 20.8.2003, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 21.8.2003, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Ты абсолютно прав, MuToGeN,
я заметил еще вчера, что после подстановки значений из формы запрос на выборку интервала работает безукоризненно.

Но есть одно огромное "НО":
он блокирует сам собой весь остальной запрос, кстати конструкция типа (age>=$age1 AND age<=$age2) работает точно также.

Если подставить перед скобкой OR вместо AND, то весь запрос начинает работать, кроме части запроса по интервалу (в этом случае он "вываливает" все значения, независимо от установленного интервала).
PM MAIL ICQ   Вверх
MuToGeN
Дата 21.8.2003, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
BlackHawk
  Дата 21.8.2003, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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')
блокирует весь остальной запрос, но если его удалить, то весь запрос работает отлично!
PM MAIL ICQ   Вверх
BlackHawk
Дата 21.8.2003, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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>";

PM MAIL ICQ   Вверх
MuToGeN
Дата 21.8.2003, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: нет
Всего: 32



Цитата
$i<@mysql_num_rows($list);
На время отладки про @ лучше вообще забыть. Короче говоря, убери все @ и посмотри, что выдаст скрипт.


--------------------
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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 21.8.2003, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Я убрал все @ из сценария, мне пришлось только в части визуального вывода в квадратных скобках имена полей взять в одинарные кавычки (иначе интерпретатор выдает: "undefined variable ...."), а в целом все работает точно также !!!
PM MAIL ICQ   Вверх
MuToGeN
Дата 21.8.2003, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 21.8.2003, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



phpMySQLAdmin у меня нет, но вместе с Денвером установилась phpMyAdmin.
Я ввожу пример своего запроса в режиме SQL в phpMyAdmin, в ответ получаю: "Your SQL-query has been executed successfully!", но результата выборки я не вижу! Вот в чем беда!

PM MAIL ICQ   Вверх
MuToGeN
Дата 21.8.2003, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 21.8.2003, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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>";
}

но получил тот же эффект: выводятся пустые значения !!!

PM MAIL ICQ   Вверх
MuToGeN
Дата 21.8.2003, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 21.8.2003, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Цитата
А как запрос выглядит, который в phpMyAdmin-e вводил?



SELECT * FROM resume WHERE lastname LIKE 'Морозов' and name LIKE 'Игорь' and town LIKE 'Москва' and (age BETWEEN '1' AND '100') ORDER BY `ID`
PM MAIL ICQ   Вверх
BlackHawk
Дата 21.8.2003, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Через print_r() тоже ничего не выводит!!!
PM MAIL ICQ   Вверх
MuToGeN
Дата 21.8.2003, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 21.8.2003, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



У меня платформа под Win32, может в ней какой-то косяк?
PM MAIL ICQ   Вверх
MuToGeN
Дата 21.8.2003, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
MuToGeN
Дата 21.8.2003, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
Vit
Дата 21.8.2003, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL WWW ICQ   Вверх
BlackHawk
Дата 21.8.2003, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Огромное тебе спасибо, Vit, ты абсолютно прав, не зря я грешил на синтаксис кавычек!
PM MAIL ICQ   Вверх
MuToGeN
Дата 22.8.2003, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 22.8.2003, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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

Я просто В ОСАДОК ВЫПАЛ!!!
Никак не пойму в чем же тут дело, может просто Денвер переставить?
PM MAIL ICQ   Вверх
Vit
Дата 22.8.2003, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL WWW ICQ   Вверх
Vit
Дата 22.8.2003, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Цитата(MuToGeN @ 22.8.2003, 02:23)
Vit, BlackHawk, кстати говоря, я это дело тестил с age в кавычках - оно прекрасно работало. Может быть, дело в версиях MySQL...

Да работало, но сравнение строк и сравнение чисел это разные вещи

Для строки '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
PM MAIL WWW ICQ   Вверх
MuToGeN
Дата 22.8.2003, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: нет
Всего: 32



Vit, согдасен с тобой.
Цитата
Все отлично, MuToGen, работает просто прекрасно! Огромное тебе человеческое спасибо!!!
Код действительно довольно простой, но весьма эффективный, как все гениальное!!!

Но мне снова не дает покоя старый косяк! Это возвращаясь к вопросу о конструкции выборки с использованием BETWEEN, ситуация такова: если не брать переменные $age1 и $age2 в кавычки, то интерпретатор возвращает синтактическую ошибку типа:
Код

MySQL returned:
1064: You have an error in your SQL syntax near 'AND ) ORDER BY 'ID' LIMIT 0, 3' at line 1
,
а если заключить в кавычки, то возвращает нулевой результат.
Я по такому случаю переустановил MySQL v.4.0.3 for Win9X-XP, результат тот-же. Я в замешательстве!!!
Я же говорил - проверять надо запрос после подстановки значений. Тут явно видно, что он получается ... AND (age BETWEEN AND ) ORDER BY...
Короче, $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!
PM MAIL ICQ   Вверх
BlackHawk
  Дата 22.8.2003, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Хорошо, Vit, я все отлично понял, что выражение помещенное в кавычки воспринимается как строка. Но когда в вышеуказанном запросе я убираю кавычки, вот что получается!
Код
MySQL returned:
1064: You have an error in your SQL syntax near 'AND ) ORDER BY ID LIMIT 3, 3' at line 1


Я никак не понимаю, в чем тут дело, ведь все же правильно!!!
Я уже и MySQL поставил v.4.0.3 - результат тот же!!!
Пробовал и под Win98 под WinXP - результат абсолютно одинаков. Может дело в чем-то другом.
Но самая главная странность в том, что вчера все отлично работало, а сегодня как я ни пытался ее оживить - безрезультатно!!!


PM MAIL ICQ   Вверх
BlackHawk
Дата 22.8.2003, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Ты прав, Vit,
если интервал указать числовыми константами, то все работает отлично. Значит переменные теряются где-то при передаче данных из формы. Но как же быть в этом случае? Как выстроить синтаксис запроса? Что посоветуешь? Или может быть для начала мне переименовать злополучные переменные на форме?
PM MAIL ICQ   Вверх
MuToGeN
Дата 22.8.2003, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
BlackHawk
Дата 22.8.2003, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Переменные теряются именно в скобках, причем наблюдается довольно странная вещь: если перед каждой теряющейся переменной поставить знак "@", то интерпретатор говорит, что эти переменные не идентифицированы!? Но как? Ведь перед ними и так стоит знак отключения предупреждений! Причем заключать в кавычки эти переменные нельзя, иначе они будут восприниматься как строка и поэтому не смогут сравниваться друг с другом, соответственно и результат будет нулевой.
PM MAIL ICQ   Вверх
MuToGeN
Дата 22.8.2003, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 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!
PM MAIL ICQ   Вверх
knave
Дата 1.9.2003, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 6.3.2003
Где: Санкт-Питербург ( Россия)

Репутация: нет
Всего: 5



вконце строки запроса полставь limit <start>, <count>

<start> - номер первой строки
<count> - количесто строк

Так обычно делают когда надо выбирать несколько строк (например для организации страничного просмотра данных на сайте - типа как в поисковиках)


--------------------
С наилучшими пожеланиями !!!
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0983 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.