Jump to content

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


Recommended Posts

Добрый день.

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

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

|area|hectare|

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

| 9 | NULL |

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

| 3 | 1 |

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

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

База данных MySQL

Edited by Varyag
Link to comment
Share on other sites

Добрый день.

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

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
Link to comment
Share on other sites

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

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

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)

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

Оффтоп
На такой жаре мозг не желает работать :)
Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 2 months later...

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

!

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

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

Edited by Yezhishe
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...