0 Пользователей и 1 Гость просматривают эту тему.
  • 11 Ответов
  • 569 Просмотров
*

effrit

  • Легенда
  • 10130
  • 1116 / 13
  • effrit.com
всем здра!
опять туплю с мускулем.
нужно одним запросом получить данные доп полей + значения из таблицы com_content.
доп.поля тягаются так
Код
		$db = JFactory::getDBO();
$query = '
select *
from #__fields_values
where item_id IN ('.$params.')
';
$db->setQuery($query);
вопрос, как дописать, чтобы забирало ещё id, заголовок, категорию, и вводнуое изображение статей из com_content по такому же условию $params?
в $params передаются id-шники статей через запятую.
спасибо.

*

NewUsers

  • Живу я здесь
  • 2290
  • 207 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Код: sql
SELECT fv.value, c.id, c.title, c.images FROM #__fields_values as fv LEFT JOIN #__content as c ON c.id = fv.item_id WHERE fv.item_id IN($params)
Возможно будут ошибки, но суть запроса остается...
Занимаюсь создание расширений для Joomla 3.9.x или выше | Доработка и настройка сайтов. Работаю по факту (без всяких предоплат). Оплата только на ЮMoney (бывшие Яндекс.Деньги). Помогу с переездом на PHP 7.x и исправлю ошибки PHP.
Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

effrit

  • Легенда
  • 10130
  • 1116 / 13
  • effrit.com
спасибо, но легче не стало  ;D
нужен рабочий код, потому что я не понимаю, что тут происходит и поправить не могу.
гуманитарная планка не движется дальше простых селектов  ;D
*

NewUsers

  • Живу я здесь
  • 2290
  • 207 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Код: php
$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select('fv.*, c1.id, c1.title, c1.catid, c2.title as cat_title')
->select('c1.images->>"$.image_intro" as image_intro')
->from('#__fields_values as fv')
->leftJoin('#__content as c1 ON c1.id = fv.item_id')
->leftJoin('#__categories as c2 ON c2.id = c1.catid')
->where('fv.item_id IN(' . $params . ')');

$db->setQuery($query);
« Последнее редактирование: 20.09.2020, 16:35:20 от NewUsers »
Занимаюсь создание расширений для Joomla 3.9.x или выше | Доработка и настройка сайтов. Работаю по факту (без всяких предоплат). Оплата только на ЮMoney (бывшие Яндекс.Деньги). Помогу с переездом на PHP 7.x и исправлю ошибки PHP.
Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

sivers

  • Живу я здесь
  • 2131
  • 287 / 0
нужен рабочий код
NewUsers привел рабочий код. только категорию добавить забыл
Код
$query = '
SELECT fv.value, c.id, c.catid, c.title, c.images
FROM #__fields_values as fv
LEFT JOIN #__content as c ON c.id = fv.item_id
WHERE fv.item_id IN ('.$params.')
';
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

effrit

  • Легенда
  • 10130
  • 1116 / 13
  • effrit.com
чет я не уверен в правильности собственного вопроса уже ))).
на выходе кака какая-то получается, не понятно, как её парсить.
по ходу, проще 2 запроса делать все же. сначала надо понять, как правильно получить доп. поля с группировкой по ид статьи.
а ещё не понятно, почему у вас первый запрос обращается не к com_content а в доп. поля, хотя поля из его таблицы вроде...
*

sivers

  • Живу я здесь
  • 2131
  • 287 / 0
а ещё не понятно, почему у вас первый запрос обращается не к com_content а в доп. поля, хотя поля из его таблицы вроде...
Так там связка из 2 таблиц идет (LEFT JOIN), записи приводятся в соответствие по полю ИД материала, которое присутствует в обеих таблицах (ON c.id = fv.item_id), соответственно, в селекте можно указывать поля из обеих таблиц. Записи, для которых соответствия ИДов не найдено - в выборку не попадают.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

effrit

  • Легенда
  • 10130
  • 1116 / 13
  • effrit.com
спасибо, попробую по-позже разобраться, но шансов мало  ;D

откатился к изначальному запросу - в шапке. сейчас затык с группировкой данных доп. полей. по юзеру.
если сделать
Код
$rows = $db->loadObjectList();
, то будут все нужные поля
а если
Код
$rows = $db->loadAssocList('item_id');
то получим 2 массива (2 юзера), но внутри массива останется только одно поле.
видимо, этот момент не победить и надо тупо самому собирать массивы по юзерам и их полям?

*

sivers

  • Живу я здесь
  • 2131
  • 287 / 0
но вот при попытке вытащить данные красиво они почему-то пропадают. Т.е. вместо нескольких параметров внутри массива или объекта с ид статьи остается только один параметр.
Понял. Это потому, что $db->loadAssocList('item_id'); создает массив с ключами = ИДами материалов. А эти ИДы одинаковые у многих значений полей (у всех, которые относятся к этому материалу они совпадают). А потому затираются. Тут придется с циклом:
Код
<?php
$query = '
SELECT fv.field_id, fv.value, c.id, c.catid, c.title, c.images
FROM #__fields_values as fv
LEFT JOIN #__content as c ON c.id = fv.item_id
WHERE fv.item_id IN ('.$params.')
';
$db->setQuery($query);
$rows = $db->loadObjectList();
$items = array();
foreach($rows as $row) $items[$row->item_id][$row->field_id] = $row;
Здесь будет сгруппировано сперва по материалам (юзерам), потом (второй индекс) по ИДам доп.полей. Т.е. все данные будут доступны.
« Последнее редактирование: 20.09.2020, 19:01:41 от sivers »
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

effrit

  • Легенда
  • 10130
  • 1116 / 13
  • effrit.com
$row->item_id - Null. внутри цикла, оттого остается только 1.
т.е в запросе не хватало fv.item_id
*

effrit

  • Легенда
  • 10130
  • 1116 / 13
  • effrit.com
в общем, все работает (только запрос подправить, чтобы ид итемов тащил).
ну и, чтобы мусор не тащить, а только нужные поля, можно ещё добавить ниже WHERE
Код
AND fv.field_id IN (3,2,9)
где значения  в скобка - ид-шники нужных доп. полей.

спасибо NewUsers & sivers, чутка поумнел  ;D
зы
почему-то думал, что присоединение будет в виде отдельного блока с данными статей, а не так, что они в каждую строку добавятся.
интересно, если много данных тащить, то не будет ли менее затратно делать 2 запроса и получать 2 массива?
типа, если в запрос добавить ещё и текст статьи, то это ж ужас будет - дублировать его по количеству доп.полей.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[РЕШЕНО] Ошибка ModMenuer::getMenus()?

Автор warlocksp

Ответов: 1
Просмотров: 161
Последний ответ 08.11.2022, 06:43:22
от warlocksp
Массовый импорт статей из Excel в Joomla

Автор koskanalya

Ответов: 1
Просмотров: 281
Последний ответ 05.11.2022, 14:15:34
от antony2606
После установки и активации плагина Add Custom CSS упал сайт (решено)

Автор paramonaff

Ответов: 9
Просмотров: 290
Последний ответ 04.11.2022, 19:53:04
от marksetter
[Решено] Отключить Mootols, Jquery и Bootstrap в Joomla 3

Автор Pazys

Ответов: 126
Просмотров: 89491
Последний ответ 21.10.2022, 22:25:23
от Alex Kop
Привязка материала к метке через запрос к БД

Автор sk8work

Ответов: 4
Просмотров: 296
Последний ответ 14.10.2022, 13:24:55
от sk8work