Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Помогите составить sql-запрос


Рекомендуемые сообщения

Добрый день.

Имеется таблица в которой помимо прочего есть поля

+----+--------+

|area|hectare|

+----+--------+

| 9 | NULL |

+----+--------+

| 3 | 1 |

hectare принимает значения либо NULL либо 1. И указывает на то, что в поле area значение указано либо в сотках либо в гектарах. Т.е. в данном случае надо читать, что в первой строке 9 соток, а во второй 3 гектара (300 соток)

Как заставить запрос, чтобы выбирать из базы значения area в заданном диапазоне? Если просто писать WHERE area < 10, то в результат попадет и поле со значением 3, хотя на самом деле в нем не 3 сотки, а три гектара.

База данных MySQL

Изменено пользователем Varyag
Ссылка на комментарий
Поделиться на другие сайты

Добрый день.

Имеется таблица в которой помимо прочего есть поля ...

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
Ссылка на комментарий
Поделиться на другие сайты

К сожалению, если исправлять таблицу, то придется код перелопачивать. Я бы хотел этого избежать.

А Вы, как я понял, предлагаете использовать два запроса.

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)

Вот таким макаром объединяются запросы. Все оказалось тривиальным.

Оффтоп
На такой жаре мозг не желает работать :)
Ссылка на комментарий
Поделиться на другие сайты

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...

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

Такая структура базы настораживает. Понимаю, что это досталось в "наследство", просто удивляюсь, сколько мозга надо иметь, чтобы лепить такие таблицы :( Найдете того, кто проектировал эту базу - дайте подзатыльник

!

Предупреждение:

Пожалуйста, будьте внимательнее при ответах - то бишь смотрите на дату последнего в теме поста. Если она хотя бы двух-трёх недельной давности - 99,9(9)% за то, что топикстартер свои проблемы решил и соответственно - тема уже не интересна кому бы то ни было.

Изменено пользователем Yezhishe
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...