SQL запрос

Есть ресурс 5 ресурсов и все они имеют свой уникальный шаблон и пару TV.
catalogs и price это TV
Кто знает, можно ли одним SQL-запросом извлечь список этих ресурсов с TV-полями.
По итогу нужно будет получить вот такой json
{
   "id": 1,
   "pagetitle": "Название №1",
   "catalogs": "Дымоходы для печей",
   "price": "100"
},
{
   "id": 2,
   "pagetitle": "Название №2",
   "catalogs": "Дымоходы для печей",
   "price": "100"
},
{
   "id": 3,
   "pagetitle": "Название №3",
   "catalogs": "Дымоходы для печей",
   "price": "100"
},
{
   "id": 4,
   "pagetitle": "Название №4",
   "catalogs": "Дымоходы для печей",
   "price": "100"
},
{
   "id": 5,
   "pagetitle": "Название №5",
   "catalogs": "Дымоходы для печей",
   "price": "100"
}
Сергій
25 декабря 2022, 10:55
modx.pro
153
0
Поблагодарить автора Отправить деньги

Комментарии: 10

Артур Шевченко
25 декабря 2022, 22:25
0
Нельзя, т.к. каждое TV это минимум одно запись в таблице modx_site_tmplvar_contentvalues, а тебе нужно на каждый ресурс 2 записи достать.В общем, я бы достал отдельно ресурс, отдельно TV, а потом собрал из этого нужного формата массив.
    Сергій
    26 декабря 2022, 09:03
    0
    Я вот не знаю верно ли я копаю но я смог 1 запросом двое данных получить.
    SELECT tmplvarid, value, contentid AS id FROM modx_site_tmplvar_contentvalues WHERE tmplvarid = 20 AND contentid = 3839 UNION SELECT tmplvarid, value, contentid AS id FROM modx_site_tmplvar_contentvalues WHERE tmplvarid = 133 AND contentid = 3839;
      Артур Шевченко
      26 декабря 2022, 13:53
      +1
      Я думаю голым SQL ты данные в нужном формате не получишь или потратишь очень много времени на написание такого запроса. Я бы вот таким запросом доставал данные
      SELECT TV.tmplvarid, TV.value, Resource.pagetitle FROM modx_site_tmplvar_contentvalues TV
      LEFT JOIN modx_site_content Resource
      ON TV.contentid = Resource.id
      WHERE TV.tmplvarid IN (13,14) AND TV.contentid = 92
      А результат в цикле переформатировал бы в нужный мне вид.
        Сергій
        27 декабря 2022, 06:11
        0
        Спасибо за совет. Уже написал код который одним запросом собирает все.
        Вот что получаю:
        [
        {
           "id": "ID ресурса",
           "pagetitle": "Название товара",
           "product_article": "TV артикул",
           "product_id": "TV айди товара",
           "parent_pagetitle": "Название каталога где лежит товар",
           "price": "TV цена товара",
           "published": "1", - ну и так понятно. 
           "url": "https://site.com/?a=resource/update&id=ID ресурса" - ссылка для менеджеров чтобы перейти в товар
        }
        ]
Алексей Смирнов
25 декабря 2022, 23:25
0
Можно 1 запросом. но нужно джойнить и писать либо на sql либо через xpdo.
Вопрос зачем? ведь, данные такие можно спокойно достать pdoResources, особенно если это 5 товаров… и он умеет в json сразу.
    Сергій
    26 декабря 2022, 08:59
    0
    Технически да. Но мне бы как то самому сделать запрос для получения этих данных.
      Сергій
      26 декабря 2022, 09:31
      0
      Можете подсказать как в json добавить название родительской категории с поля parent. Бо выводит только ID.
        Александр Туниеков
        26 декабря 2022, 10:57
        0
        Сделать join родительских ресурсов.

        select modResource.id, modResource.pagetitle, Parent.pagetitle as catalogs
        from modx_site_content as modResource
        join modx_site_content as Parent on modResource.parent = Parent.id
      Alexey
      25 декабря 2022, 23:35
      0
      Вот здесь отличный пример через xpdo с джоинами полей TV.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        10