2011-08-12 58 views
0

如何从一个渠道订购来自不同作者的每个条目的最新3个条目? (所以他们最终不会成为同一作者的3条最新条目) - 我想我需要使用SQL查询来实现它?作者的表达式引擎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

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


最好的办法在这里,因为你需要你的自定义字段解析,就是先找到最新的4次进入entry_ids从不同的作者,然后使用参数entry_id通过嵌入将它们传递给channel:entries标记。

这应该工作(一定要用适当的整数替换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} 

您曾提到,这个代码给你一个递归错误 - 这意味着您已将另一个电话嵌入嵌入中。不要这样做。

+0

由于德里克 - 我认为作品 - 没有办法,我早就想通出 - 是地位! ee代码或sql?这是否意味着'不'? backspace = 1做什么? – mark

+0

'!='意味着“不等于”......这是一个非常重要的SQL查询,可以肯定,但这是EE的强大功能 - 您可以通过正确的查询来完成任何事情。有关'backspace'参数的更多信息[请看这里](http://expressionengine.com/user_guide/modules/channel/parameters.html#par_backspace)(许多EE模块标签以完全相同的方式使用它)。 –

+0

什么是退格删除?如果我删除它似乎工作正常。是| ? IN(选择MAX查找最新的入口日期?同意EE功能强大,但是在论坛中寻找支持真的很少,但没有很多SQL Query示例。 – mark

1

WHERE IN(SELECT MAX(entry_date)...)示例在数据库中遇到了很大的打击。它似乎基本上为每个条目做一个子查询。另一种我发现(Stackoverflow)使用的只是一个子查询的一部分,

报价:做一组由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