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

をCATEGORY_IDするには限界ましたアウト - ステータスです! eeコードまたはSQL?それは「ない」という意味ですか?バックスペース= 1は何をしますか? – mark

+0

'!='は「等しくない」ということを意味します...確かに全体的ではないSQLクエリですが、それはEEの力です。 'backspace'パラメータ[ここをクリック](http://expressionengine.com/user_guide/modules/channel/parameters.html#par_backspace)の詳細については、多くのEEモジュールタグがまったく同じ方法でそれを使用しています。 –

+0

バックスペースの削除とは何ですか?私はそれを削除する場合は正常に動作するようだ。それは| ? EEは強力ですが、最近のフォーラムではサポートが得られていませんが、そこには多くのSQLクエリの例はありません。 – mark

1

WHERE IN(SELECT MAX(entry_date)...)の例は、データベースで大ヒットしました。これは基本的に各エントリのサブクエリを行うようです。 :-)、GROUP BYでクエリをラップすることにより、ORDER BYの後にGROUP BYを実行してください:私が見つけた代替(Stackoverflowは)部分から、

引用符でちょうど1サブクエリを使用しています。

とにかく...これは、すべての著者と最後に投稿されたエントリタイトルを取得します。 url_titleも必要な場合は、両方のSELECT文に追加する必要があります。私はそれがうまくいくと思う - - 私はそれを考え出しただろう方法はありません、私は感謝デレクを、いくつかの追加のオプションを含めるだけで、最後の4ヶ月間、フェッチ、8をCHANNEL_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 
関連する問題