Varyag Опубликовано 24 июня, 2010 Жалоба Поделиться Опубликовано 24 июня, 2010 (изменено) Добрый день. Имеется таблица в которой помимо прочего есть поля +----+--------+ |area|hectare| +----+--------+ | 9 | NULL | +----+--------+ | 3 | 1 | hectare принимает значения либо NULL либо 1. И указывает на то, что в поле area значение указано либо в сотках либо в гектарах. Т.е. в данном случае надо читать, что в первой строке 9 соток, а во второй 3 гектара (300 соток) Как заставить запрос, чтобы выбирать из базы значения area в заданном диапазоне? Если просто писать WHERE area < 10, то в результат попадет и поле со значением 3, хотя на самом деле в нем не 3 сотки, а три гектара. База данных MySQL Изменено 24 июня, 2010 пользователем Varyag Ссылка на комментарий Поделиться на другие сайты Поделиться
Aleksa106 Опубликовано 24 июня, 2010 Жалоба Поделиться Опубликовано 24 июня, 2010 Добрый день. Имеется таблица в которой помимо прочего есть поля ... hectare принимает значения либо NULL либо 1. И указывает на то, что в поле area значение указано либо в сотках либо в гектарах. Т.е. в данном случае надо читать, что в первой строке 9 соток, а во второй 3 гектара (300 соток) Как заставить запрос, чтобы выбирать из базы значения area в заданном диапазоне? Если просто писать WHERE area < 10, то в результат попадет и поле со значением 3, хотя на самом деле в нем не 3 сотки, а три гектара. База данных MySQL ИМХО есть смысл привести данные к одному знаменателю (или га, или сотки), а в клиенте как хотите так их и конвертите... или попробуйте так: SELECT NULL, table.area, table.hectare FROM table WHERE table.hectare is NULL and table.area < 10 Ссылка на комментарий Поделиться на другие сайты Поделиться
Varyag Опубликовано 24 июня, 2010 Автор Жалоба Поделиться Опубликовано 24 июня, 2010 К сожалению, если исправлять таблицу, то придется код перелопачивать. Я бы хотел этого избежать. А Вы, как я понял, предлагаете использовать два запроса. SELECT NULL, table.area, table.hectare FROM table WHERE table.hectare is NULL and table.area < 10 - это для строк у которых значение area в сотках. SELECT NULL, table.area, table.hectare FROM table WHERE table.hectare is not NULL and table.area * 100 < 10 - это вернет строки у которых значение в Га. А потом уже их результаты объединить в программном коде? Ну что же, спасибо за вариант. А можно как нибудь эти два запроса сформулировать одним sql запросом? Отвечу сам себе ;) SELECT `id`, lands.area, lands.hectare FROM `lands` WHERE (lands.hectare is NULL and lands.area < 10) OR (lands.hectare is not NULL and lands.area * 100 < 10) Вот таким макаром объединяются запросы. Все оказалось тривиальным. Оффтоп На такой жаре мозг не желает работать :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Aleksa106 Опубликовано 24 июня, 2010 Жалоба Поделиться Опубликовано 24 июня, 2010 SELECT `id`, lands.area, lands.hectare FROM `lands` WHERE (lands.hectare is NULL and lands.area < 10) OR (lands.hectare is not NULL and lands.area * 100 < 10) для объединения запросов есть команда UNION... Ссылка на комментарий Поделиться на другие сайты Поделиться
Sergey S Опубликовано 30 августа, 2010 Жалоба Поделиться Опубликовано 30 августа, 2010 (изменено) Такая структура базы настораживает. Понимаю, что это досталось в "наследство", просто удивляюсь, сколько мозга надо иметь, чтобы лепить такие таблицы Найдете того, кто проектировал эту базу - дайте подзатыльник ! Предупреждение:Пожалуйста, будьте внимательнее при ответах - то бишь смотрите на дату последнего в теме поста. Если она хотя бы двух-трёх недельной давности - 99,9(9)% за то, что топикстартер свои проблемы решил и соответственно - тема уже не интересна кому бы то ни было. Изменено 30 августа, 2010 пользователем Yezhishe Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти