Varyag Posted June 24, 2010 Report Share Posted June 24, 2010 (edited) Добрый день. Имеется таблица в которой помимо прочего есть поля +----+--------+ |area|hectare| +----+--------+ | 9 | NULL | +----+--------+ | 3 | 1 | hectare принимает значения либо NULL либо 1. И указывает на то, что в поле area значение указано либо в сотках либо в гектарах. Т.е. в данном случае надо читать, что в первой строке 9 соток, а во второй 3 гектара (300 соток) Как заставить запрос, чтобы выбирать из базы значения area в заданном диапазоне? Если просто писать WHERE area < 10, то в результат попадет и поле со значением 3, хотя на самом деле в нем не 3 сотки, а три гектара. База данных MySQL Edited June 24, 2010 by Varyag Quote Link to comment Share on other sites More sharing options...
Aleksa106 Posted June 24, 2010 Report Share Posted June 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 Quote Link to comment Share on other sites More sharing options...
Varyag Posted June 24, 2010 Author Report Share Posted June 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) Вот таким макаром объединяются запросы. Все оказалось тривиальным. Оффтоп На такой жаре мозг не желает работать :) Quote Link to comment Share on other sites More sharing options...
Aleksa106 Posted June 24, 2010 Report Share Posted June 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... Quote Link to comment Share on other sites More sharing options...
Sergey S Posted August 30, 2010 Report Share Posted August 30, 2010 (edited) Такая структура базы настораживает. Понимаю, что это досталось в "наследство", просто удивляюсь, сколько мозга надо иметь, чтобы лепить такие таблицы Найдете того, кто проектировал эту базу - дайте подзатыльник ! Предупреждение:Пожалуйста, будьте внимательнее при ответах - то бишь смотрите на дату последнего в теме поста. Если она хотя бы двух-трёх недельной давности - 99,9(9)% за то, что топикстартер свои проблемы решил и соответственно - тема уже не интересна кому бы то ни было. Edited August 30, 2010 by Yezhishe Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.