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

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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