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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

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