powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Создание списка объектов в порядке возрастания(цены)
18 сообщений из 18, страница 1 из 1
Создание списка объектов в порядке возрастания(цены)
    #38627089
Reliza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Имеется класс со свойствами:/// Наименование
Property Name As %String;
/// Цена
Property Count As %Currency;
Также созданы объекты этого класса, хранятся в бд:

#IDNamePrice122Item25.0000226Mouse40.0000226Keyboard15.0000
И есть метод класса, который должен возвращать наименования в порядке возрастания цены:ClassMethod GetListByPriceAscend() As %ListOfObjects
{
  set rs = ##class(%ResultSet).%New("Test.Product.ByPrice")
  do rs.Execute()
  do rs.%Display()
  k rs
  q ""
}
У меня получилось его реализовать с использованием SQL-запроса:Query ByPrice(PriceA As %String) As %SQLQuery [ SqlProc ]
{
  SELECT Name FROM Product ORDER BY Price
}
В общем, в терминале выводится все как нужно - выводятся Name в порядке возрастания цены. Подскажите, пожалуйста, как сделать так, чтобы метод GetListByPriceAscend() возвращал объект %ListOfObjects? Я не совсем понимаю как можно создать это список, и как туда занести значения в нужном мне порядке. Спасибо.
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38627642
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reliza, вы понимаете, что в вашем случае данные читаются с диска в оперативную память ?

/// Наименование
Property Name As %String;

/// Цена
Property Price As %Currency;
/// Индексы - это важно!
Index Price On Price;

/// А если товаров over 9000+ ?
ClassMethod GetListByPriceAscend() As %ListOfObjects
{
  s sql="Select ID From Test.Product Order By Price "
  s rs = ##class(%SQL.Statement).%ExecDirect(.stm,sql)
  s list = ##class(%ListOfObjects).%New("Test.Product")
  for { Q:'rs.%Next()
    d list.Insert(..%OpenId(rs.ID))
  }
  Q list
}

///
ClassMethod TestGetListByPriceAscend()
{
  s list=..GetListByPriceAscend()
  s key = "" for { s obj=list.GetNext( .key ) Q:key="" 
    w !,obj.Name, $c(9), obj.Price
  }
}

...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38627732
Reliza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefint,
приведенный вами код ничего не выводит. Почему? Объекты в бд имеются..
Что значит: $c(9) ?
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38627737
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reliza,

Вы не просили, чтобы он выводился. Он возвращается в виде списка объектов.
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38627773
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reliza, второй метод демонстрирует результат первого метода и как раз выводит список в терминал.
$CHAR(9) - выводит символ табуляции.
Университет назовете?
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38628047
Reliza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefint,
Это я понимаю =). Я имела в виду второй метод: TestGetListByPriceAscend. Он ничего не выводит.
Сибирский федеральный университет. А почему спрашиваете? С Cache занимаюсь второй день.
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38628255
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reliza, проверьте запрос в портале управления или выведите результат запроса во втором методеw rs.%SQLCODEИнтересовало название ВУЗа - программа Cache Campus работает :)
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38638344
Reliza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
w rs.%SQLCODEвыводит следующее:
-30
Что это значит?
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38638356
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relizaw rs.%SQLCODEвыводит следующее:
-30
Что это значит? SQL Error Messages
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38638357
Reliza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалось узнать, что -30 - код ошибки( таблица не найдена ). Пришлось сформулировать запрос таким образом:SELECT Name FROM SOMENAMESPACE_TEST.Product ORDER BY PriceСтранно, почему таблица переименована таким образом? В cache code к объектам обращаемся ведь таким образом: SIS.HomeWork.Market.Product
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38638363
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RelizaСтранно, почему таблица переименована таким образом? В cache code к объектам обращаемся ведь таким образом: SIS.HomeWork.Market.ProductSELECT Name FROM  Product  ORDER BY Price ≠ Select ID From  Test.Product  Order By Price

Packages and SQL
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38638441
Reliza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT ID FROM SOMENAMESPACE_TEST.Product ORDER BY PriceВыдает в качестве результата несуществующий ID, почему?
АSELECT ID, Name FROM SOMENAMESPACE_TEST.Product ORDER BY Priceвыдает все как надо?

PS. servit, благодарю вас за полезные ссылки. Могли бы вы подсказать ресурс по Cache Object Script, для самых маленьких?
http://www.intersystems.ru/cache/education/docs/objectqs.pdf не предлагать.
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38638460
Reliza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, можно ли перебрать объекты в БД, не используя глобалы и метод $order()?
Товарищ doublefint в этом топике подсказал следующее: s sql="Select ID, Name From Test.Product Order By Price "
 s rs = ##class(%SQL.Statement).%ExecDirect(.stm,sql)
 for { Q:'rs.%Next()
  // получаем id из rs.ID, все ок
 }
 Можно ли осуществить подобное, иными методами?
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38638487
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reliza<...> выдает в качестве результата несуществующий ID, почему?
А <...> выдает все как надо?Приведите код полностью .
RelizaМогли бы вы подсказать ресурс по Cache Object Script, для самых маленьких? Разработчику Caché
RelizaПодскажите, можно ли перебрать объекты в БД, не используя глобалы и метод $order()? Extents
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38639153
Reliza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit, очередной раз благодарю. Не знаю можно ли тут репутацию лайкать...
Про полученный неверный ID объекта, немножко обманула.., все работает, просто
Подскажите, а если я сформирую %ListOfObjects с помощью %ResultSet таким образом: set rset = ##class(%ResultSet).%New("Test.Product:Extent")
 do rset.Execute()
 
 s list = ##class(%ListOfObjects).%New("Test.Product")
 while ( rset.Next() )
 {
  do list.Insert(..%OpenId(rset.Data("ID")))
 }
 Можно ли как-нибудь отсортировать этот список?
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38639235
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reliza, тут такой момент... Вы вообще понимаете, что вы пытаетесь сделать?
Лежат себе записи в базе (т.е. на диске), а вы читаете их и открываете как объекты ( скопировать с диска в память ),
поместить в список ( +память. Всё всё с диска? ), и... отсортировать!?
Можно конечно отсортировать методами списка, но СУБД для чего предназначена?
Правильно - хранение, поиск, сортировка, обработка.
Так сразу и отсортируйте свои идентификаторы
 s sql="Select ID From Your.TableName Order By ID Desc "
 s rs = ...
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38639365
Reliza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefintReliza, тут такой момент... Вы вообще понимаете, что вы пытаетесь сделать?
Видимо, вы правы, я не совсем понимаю, что хочу сделать и как это пытаюсь делать. Знакомлюсь с БД, СУБД и самим Caché с недавних пор, многое пытаюсь делать методом "научного тыка" и по подсказкам с форума.. Недостаток фундаментальных знаний сказывается.
...
Рейтинг: 0 / 0
Создание списка объектов в порядке возрастания(цены)
    #38641626
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RelizaSELECT ID FROM SOMENAMESPACE_TEST.Product ORDER BY PriceВыдает в качестве результата несуществующий ID, почему?
АSELECT ID, Name FROM SOMENAMESPACE_TEST.Product ORDER BY Priceвыдает все как надо?

PS. servit, благодарю вас за полезные ссылки. Могли бы вы подсказать ресурс по Cache Object Script, для самых маленьких?
http://www.intersystems.ru/cache/education/docs/objectqs.pdf не предлагать.

Есть онлайн курсы по Cache и Zen, бесплатные.
Полезные квикстарт статьи:

CSP+REST+Angular.js

CSP+Twitter Bootstrap, примеры:
первый
второй

Cache + jQuery - раз и два .

Канал https://www.youtube.com/user/InterSystemsRUS
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Создание списка объектов в порядке возрастания(цены)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]