Выражение engine sql запрос записей список авторов
Как я могу заказать последние 3 записи из канала с каждой записью от другого автора? (поэтому они не входят в 3 последних записи того же автора). Мне кажется, мне нужно использовать SQL Query для этого?
{exp:channel:entries orderby="screen_name|date" channel="portfolios" limit="3" group_id="5" dynamic="no"}
<img src=" {thumbnail}" alt="{title}"/><br />
{title}<br />
{/exp:channel:entries}
Спасибо заранее!
Ответы
Ответ 1
Отметьте - вот ответ ответа, который я разместил на другом вопросе об ошибке:
Лучший подход здесь, так как вам нужны ваши настраиваемые поля, нужно сначала найти entry_ids из последних 4 записей от разных авторов, а затем передать их тегу channel:entries
через встраивание, используя параметр entry_id
.
Это должно работать (обязательно замените channel_id
на соответствующее целое число). Замените весь текущий кусок кода следующим:
{embed="embeds/_latest_per_member" entry_ids="{exp:query sql="SELECT entry_id, author_id FROM exp_channel_titles WHERE entry_date IN( SELECT MAX(entry_date) FROM exp_channel_titles WHERE status != 'closed' AND channel_id = 1 GROUP BY author_id ) ORDER BY entry_date DESC LIMIT 4" backspace="1"}{entry_id}|{/exp:query}"}
Затем ваш шаблон вставляет /_latest_per_member может выглядеть примерно так:
{exp:channel:entries channel="channel_name" entry_id="{embed:entry_ids}"}
{author_id}<br />
<a href="{path=portfolios/gallery/{username}}"><img src="{thumbnail}"></a><br>
<a href="{path=portfolios/gallery/{username}}">{title}</a><br />
{/exp:channel:entries}
Вы упомянули, что этот код дал вам рекурсивную ошибку - это означает, что вы добавили еще один вызов встраивания внутри встраивания. Не делайте этого.
Ответ 2
Пример WHERE IN (SELECT MAX (entry_date)...) сильно пострадал в базе данных. По всей видимости, для каждой записи, по-видимому, есть подзапрос. Альтернатива, которую я нашел (fooobar.com/info/6535/...), использует только один подзапрос в части FROM,
quote: Сделайте GROUP BY после ORDER BY, свернув свой запрос с помощью GROUP BY:-).
В любом случае... Это выбирает всех авторов и их последний опубликованный заголовок. Если вы также хотите url_title, вы должны добавить его в оба оператора SELECT. Я включил некоторые дополнительные опции, забираю только за последние 4 месяца, ограничиваясь каналом_и_и 8 и ограничивая категорию_ид 68.
SELECT author_id, screen_name, title, FROM_UNIXTIME(entry_date) AS m_date
FROM (
SELECT t.author_id, t.title, m.screen_name, t.entry_date
FROM exp_channel_titles AS t
LEFT JOIN exp_members AS m ON t.author_id = m.member_id
LEFT JOIN exp_category_posts AS c ON c.entry_id = t.entry_id
WHERE t.entry_date > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 4 MONTH))
AND t.channel_id = 8
AND c.cat_id = 68
ORDER BY t.entry_date DESC
) AS S
GROUP BY S.author_id
ORDER BY entry_date DESC
# LIMIT 10