2011-08-12 55 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