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

effrit

  • Легенда
  • 9970
  • 1099 / 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

  • Живу я здесь
  • 2021
  • 185 / 0
Код: 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.x.x | Доработка и настройка сайтов. Работаю по факту (без всяких предоплат). Оплата только на Яндекс.Деньги. Помогу с переездом на PHP 7.x и исправлю ошибки PHP
*

effrit

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

NewUsers

  • Живу я здесь
  • 2021
  • 185 / 0
Код: 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.x.x | Доработка и настройка сайтов. Работаю по факту (без всяких предоплат). Оплата только на Яндекс.Деньги. Помогу с переездом на PHP 7.x и исправлю ошибки PHP
*

sivers

  • Завсегдатай
  • 1621
  • 225 / 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.')
';
На связи в телеге @sivers
*

effrit

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

sivers

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

effrit

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

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

*

sivers

  • Завсегдатай
  • 1621
  • 225 / 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 »
На связи в телеге @sivers
*

effrit

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

effrit

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

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

Составить SQL запрос скопировать `introtext` в`metadesc`

Автор malexv

Ответов: 8
Просмотров: 251
Последний ответ 05.04.2021, 19:52:52
от malexv
Вывод доп. полей в любом месте

Автор lgmax

Ответов: 4
Просмотров: 332
Последний ответ 01.04.2021, 11:55:05
от revil
[Решено] Несколько URL в одно условие IF

Автор lgmax

Ответов: 2
Просмотров: 86
Последний ответ 21.03.2021, 18:07:17
от lgmax
Права на публикацию статей

Автор stepan39

Ответов: 0
Просмотров: 74
Последний ответ 20.03.2021, 16:33:16
от stepan39
Открытие статей в модальном окне

Автор Vap

Ответов: 4
Просмотров: 174
Последний ответ 17.03.2021, 06:22:08
от Vap