Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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