質問

やあ皆さん、私は戻ってきました、そして皆さんのさらなる輝きを楽しみにしています。テーブルが 2 つあります。

  1. ニュースレター — 各行には電子メールの「ID」、「件名」、「本文」、「差出人」ヘッダーが含まれます。
  2. newsletter_queue — 各行には、キューに追加された「id」、「email」アドレス、「date」、および「newsletterid」が含まれます。

私の目標は、'newsletter_queue' から x 個の行を取得できる MySQL クエリを開発し、GROUP_CONCAT (または機能するもの) を使用してすべての電子メールを解析する文字区切りの文字列に入れながら、'newsletterid' でグループ化することです。 PHPで。これらを一緒にしたい理由は、私が使用しているメーラー ライブラリ (swiftmailer) がバッチ電子メールの電子メールを含む配列を受け入れるためです。また、可能であれば、2 つのテーブルを結合して、2 番目のクエリを回避するのが非常に効率的です。

これまでに私が持っているものは次のとおりです。

SELECT GROUP_CONCAT(email ORDER BY date ASC SEPARATOR '|'), newsletterid, date
FROM newsletter_queue
WHERE status='0'
GROUP BY newsletterid
LIMIT 125

私の問題は、個別のニュースレターではなく、一度に送信される電子メールの総量を制限しようとしているという事実により、すでに連結されている行に LIMIT 125 が適用され、役に立たなくなっていることです。誰かが私を正しい方向に導いてくれれば、とても感謝します。最終的にサンプルを作成できれば、それも素晴らしいことです。

役に立ちましたか?

解決

SELECT GROUP_CONCAT(email ORDER BY date ASC SEPARATOR '|'), newsletterid, date
FROM 
   (SELECT email, newsletterid, date 
    FROM newsletter_queue
    WHERE status="0"
    ORDER BY date ASC
    LIMIT 125) as Unsent
GROUP BY newsletterid
GROUP BYステートメントが実行される前に

これは、内側のクエリに制限が適用されます。ソートとにかく一時テーブルを必要としますによって声明によるグループはグループ以来、外側のクエリであることは重要ではありません。あなたが連結された結果の順序付けのいくつかの種類が必要な場合、あなたはそれで日付と順番に最大または最小を適用することによって、例えば、外部クエリにそれを適用することができます。

他のヒント

これはまた、あなたが欲しいものを行う必要があります:

SELECT substring_index(GROUP_CONCAT(email ORDER BY date ASC SEPARATOR '|'),'|',125), newsletterid, date
FROM newsletter_queue
WHERE status='0'
GROUP BY newsletterid

ワイルドなアイデアが、この仕事をしますか?

SELECT GROUP_CONCAT(email ORDER BY date ASC SEPARATOR '|'), newsletterid, date
FROM newsletter_queue
WHERE status='0'
GROUP BY newsletterid, ID MOD 125

私は125
であることを一つのレコードに電子メール住所がの最大量を疑うだろう 残念ながら、量は、1と125との間とすることができる125を正確ではない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top