список записей запросов SQL Server по авторам - PullRequest
0 голосов
/ 13 августа 2011

Как мне заказать последние 3 записи из канала с каждой записью от другого автора?(таким образом, они не заканчивают тем, что были 3 последними записями того же автора) - я думаю, что мне нужно использовать SQL-запрос для этого?

{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} 

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Марк - вот репост ответа, который я разместил на другом двойном вопросе :


Лучший подход здесь, так как вам нужно проанализировать ваши настраиваемые поля, это сначала найти 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}"}

Тогда ваш шаблон embeds / _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}

Вы упоминали, что этот код выдал вам рекурсивную ошибку - это означает, что вы сделали еще один вызов для встраивания в встраивания. Не делай этого.

1 голос
/ 09 декабря 2013

Пример WHERE IN (SELECT MAX (entry_date) ...) сильно ударил по базе данных. Похоже, по существу, сделать подзапрос для каждой записи. Найденная мной альтернатива ( Stackoverflow ) использует только один подзапрос в части FROM,

цитата: Выполните GROUP BY после ORDER BY, поместив запрос в GROUP BY :-).

В любом случае ... Извлекает всех авторов и их последний опубликованный заголовок. Если вам также нужен url_title, вы должны добавить его в оба оператора SELECT. Я включил некоторые дополнительные опции, выбор только за последние 4 месяца, ограничен channel_id 8 и ограничен category_id 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
...