Извините, это опять я...

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Извините, это опять я...

Сообщение Kotъ-Begemotъ » 04 сен 2007, 03:01

Создаётся впечатление что тут один я задаю вопросы, но что делать, действительно такая ситуация...
Так вот...
А есть ли в РСУБД понятие "чётности"/"нечётности"? То есть можно как-то в фильтре проверить четное ли поле таблицы или нет, и на основании этого отобразить (исключить из фильтра) или не отображать даннное поле? В Paradox этого сделать нельзя, поэтому делал через "ЦК КПСС" то есть функцию, которая писАла в спец. таблицу с AutoIncrement полем и возвращала четное число значение поля или нет... Это можно как-то во "взрослом SQL" реализовать проще? Нет функций типа IsOdd или IdEven или других механизмов?
Про совет писать в спец табрицу (это для Paradox, а для SQL создать генератор по модулю 2 я не говорю сейчас ;)

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 04 сен 2007, 07:52

Ну а что мешает проверить делимость нацело на 2?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 04 сен 2007, 11:35

Если это фильтр, то может, на клиенте и смотреть?
Если же это выборка, без возможности посмотреть "всё", то в ХП реализуй.

Slavik
Сообщения: 115
Зарегистрирован: 17 янв 2007, 11:52

Re: Извините, это опять я...

Сообщение Slavik » 04 сен 2007, 16:14

Kotъ-Begemotъ писал(а):А есть ли в РСУБД понятие "чётности"/"нечётности"? То есть можно как-то в фильтре проверить четное ли поле таблицы или нет, и на основании этого отобразить (исключить из фильтра) или не отображать даннное поле?
Фильтр полей??? или всё же строк в выборке???

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Re: Извините, это опять я...

Сообщение Kotъ-Begemotъ » 04 сен 2007, 19:55

Slavik писал(а):
Kotъ-Begemotъ писал(а):А есть ли в РСУБД понятие "чётности"/"нечётности"? То есть можно как-то в фильтре проверить четное ли поле таблицы или нет, и на основании этого отобразить (исключить из фильтра) или не отображать даннное поле?
Фильтр полей??? или всё же строк в выборке???
Обычный фильтр для строк. К сожалению в Paradox прямо в выражении фильтра у меня не получилось анализировать на чётность или нечётность, не жрёт выражения :(((

Slavik
Сообщения: 115
Зарегистрирован: 17 янв 2007, 11:52

Re: Извините, это опять я...

Сообщение Slavik » 04 сен 2007, 20:52

WildSery правильно советует. Попробуй TDataSet.OnFilterRecord на клиенте или хранимую процедуру (в FB2 можно и execute block) на сервере.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Re: Извините, это опять я...

Сообщение 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 - это скорее нонсенс :lol:

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

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

Ответить