Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Kotъ-Begemotъ
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Сообщение
Kotъ-Begemotъ » 04 сен 2007, 03:01
Создаётся впечатление что тут один я задаю вопросы, но что делать, действительно такая ситуация...
Так вот...
А есть ли в РСУБД понятие "чётности"/"нечётности"? То есть можно как-то в фильтре проверить четное ли поле таблицы или нет, и на основании этого отобразить (исключить из фильтра) или не отображать даннное поле? В Paradox этого сделать нельзя, поэтому делал через "ЦК КПСС" то есть функцию, которая писАла в спец. таблицу с AutoIncrement полем и возвращала четное число значение поля или нет... Это можно как-то во "взрослом SQL" реализовать проще? Нет функций типа IsOdd или IdEven или других механизмов?
Про совет писать в спец табрицу (это для Paradox, а для SQL создать генератор по модулю 2 я не говорю сейчас

-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 04 сен 2007, 11:35
Если это фильтр, то может, на клиенте и смотреть?
Если же это выборка, без возможности посмотреть "всё", то в ХП реализуй.
-
Slavik
- Сообщения: 115
- Зарегистрирован: 17 янв 2007, 11:52
Сообщение
Slavik » 04 сен 2007, 16:14
Kotъ-Begemotъ писал(а):А есть ли в РСУБД понятие "чётности"/"нечётности"? То есть можно как-то в фильтре проверить четное ли поле таблицы или нет, и на основании этого отобразить (исключить из фильтра) или не отображать даннное поле?
Фильтр полей??? или всё же строк в выборке???
-
Kotъ-Begemotъ
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Сообщение
Kotъ-Begemotъ » 04 сен 2007, 19:55
Slavik писал(а):Kotъ-Begemotъ писал(а):А есть ли в РСУБД понятие "чётности"/"нечётности"? То есть можно как-то в фильтре проверить четное ли поле таблицы или нет, и на основании этого отобразить (исключить из фильтра) или не отображать даннное поле?
Фильтр полей??? или всё же строк в выборке???
Обычный фильтр для строк. К сожалению в Paradox прямо в выражении фильтра у меня не получилось анализировать на чётность или нечётность, не жрёт выражения

((
-
Slavik
- Сообщения: 115
- Зарегистрирован: 17 янв 2007, 11:52
Сообщение
Slavik » 04 сен 2007, 20:52
WildSery правильно советует. Попробуй TDataSet.OnFilterRecord на клиенте или хранимую процедуру (в FB2 можно и execute block) на сервере.
-
Kotъ-Begemotъ
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Сообщение
Kotъ-Begemotъ » 04 сен 2007, 22:31
Slavik писал(а):WildSery правильно советует. Попробуй TDataSet.OnFilterRecord на клиенте или хранимую процедуру (в FB2 можно и execute block) на сервере.
+
Буду думать. Проблема в том, что подобные вопросы мне отныне надо решать для двух платформ - для Paradox чтобы вводить новшества в существующем и работающем проекте, и под FB2.0 поскольку на него будет осуществляться переход...
-
aaa3d
- Сообщения: 69
- Зарегистрирован: 23 ноя 2005, 11:06
Сообщение
aaa3d » 05 сен 2007, 09:08
Dimitry Sibiryakov писал:
Ну а что мешает проверить делимость нацело на 2?
без всяких ХП или фильтров на клиенте....
выведет четные.
select * from shop where shop_id= cast ((shop_id/2) as integer) *2
удачи
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 05 сен 2007, 11:27
aaa3d писал(а):удачи
А она понадобится, потому как бездырочные id - это скорее нонсенс

-
aaa3d
- Сообщения: 69
- Зарегистрирован: 23 ноя 2005, 11:06
Сообщение
aaa3d » 05 сен 2007, 11:36
при чем тут бездырочные ID ?
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 05 сен 2007, 12:04
Может, и не при чём. Мне показалось, что "чётное" в данном случае интерпретировалось как "каждое второе".
-
Kotъ-Begemotъ
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Сообщение
Kotъ-Begemotъ » 05 сен 2007, 16:43
WildSery писал(а):Может, и не при чём. Мне показалось, что "чётное" в данном случае интерпретировалось как "каждое второе".
Тебе правильно показалось

Но в моём случае "дырок" не будет -потоком льются записи в таблицу Orders и нужно "по-честному" раскидать их на двух диспетчеров

Было так, чейчас уже немного по-другому всё, но на будущее, мало ли...
-
Kotъ-Begemotъ
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Сообщение
Kotъ-Begemotъ » 05 сен 2007, 16:48
aaa3d писал(а):Dimitry Sibiryakov писал:
Ну а что мешает проверить делимость нацело на 2?
без всяких ХП или фильтров на клиенте....
выведет четные.
select * from shop where shop_id= cast ((shop_id/2) as integer) *2
удачи
Да, но проблема с использованием этого выражения в свойстве Filter для Paradox'овской Ttable которая в существующем проекте есть...

(( Поэтому приходилось колхозить с "псеводгенератором" и функцией возвращающей значение его по модулю 2...
Хм... Кстати проверил, в выражинии фильтра всё-таки эта конструкция работает! Правда применять уже не придётся, так как у меня была возможность это суррогатное поле менять, для передачи заказа от одного диспетчера другому, так что даже при таком выражении фильтра пришлось бы всё равно вводить еще одно поле - признак передачи заказа от диспетчера диспетчеру... Но за идею спасибо! Я как-то не додумался до такого выражения фильтра... Век учись...
