表达引擎sql查询条目由作者列出

时间:2011-08-12 22:32:06

标签: sql expressionengine

我如何从一个频道订购最新的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 个答案:

答案 0 :(得分:2)

马克 - 这是我在other dupe question上发布的答案的转贴:


此处的最佳方法,因为您需要解析自定义字段,首先要查找来自不同作者的最新4个条目的entry_ids,然后使用{{channel:entries标记通过嵌入将其传递到entry_id标记1}}参数。

这应该有效(确保用适当的整数替换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}

你曾经提到过这段代码给你一个递归错误 - 这意味着你已经再次调用嵌入中的embed 了。不要那样做。

答案 1 :(得分:1)

WHERE IN(SELECT MAX(entry_date)...)示例在数据库中受到了极大的打击。它似乎基本上为每个条目做一个子查询。我找到的替代方法(Stackoverflow)在FROM部分只使用一个子查询,

引用:在ORDER BY之后通过使用GROUP 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