Frage

Hey everyone, ich bin zurück und freuen uns auf mehr von Ihrer Brillanz. Ich habe zwei Tabellen:

  1. Newsletter - jede Zeile enthält einen ‚id‘, ‚Thema‘, ‚Körper‘ & ‚aus‘ Header für eine E-Mail
  2. newsletter_queue - Jede Zeile enthält eine 'ID', 'E-Mail' Adresse 'Datum' hinzugefügt, um die Warteschlange und 'newsletterid'

Mein Ziel ist es, eine MySQL-Abfrage zu entwickeln, die x Menge der Zeilen von ‚newsletter_queue‘ ziehen kann, dann die Gruppe sie durch ihre ‚newsletterid‘, während GROUP_CONCAT (oder was auch immer funktioniert), um alle E-Mails in ein Zeichen getrennte Zeichenfolge zu setzen, die ich werde mit PHP analysieren. Der Grund Ich mag würde sie gemeinsam haben, ist, weil die Mailer-Bibliothek I (Swiftmailer) verwende akzeptiert ein Array mit E-Mails für die Batch-E-Mails. Auch, wenn möglich, wäre es sehr ordentlich sein, die beiden Tabellen miteinander zu verbinden, um dadurch eine zweite Abfrage zu vermeiden.

Hier ist, was ich bisher:

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

Mein Problem ist, dass das LIMIT 125 wird auf die bereits verketteten Reihen angelegt wird, wodurch es unbrauchbar aufgrund der Tatsache, dass ich versuche, die Menge der gesamten E-Mails zu begrenzen, zu einem Zeitpunkt gesendet wird, nicht eindeutig zuzuordnen Newsletter. Wenn jemand mich in der richtigen Richtung lenken könnte, wäre ich sehr dankbar. Wenn Sie das Beispiel schreibt aufzuwickeln, das ist zu groß.

War es hilfreich?

Lösung

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

Dies gilt die Grenze für die innere Abfrage, bevor die Gruppe durch Anweisung ausgeführt wird. Es spielt keine Rolle, dass die Gruppe, die durch Anweisung in der äußeren Abfrage, da eine Gruppe von einer temporären Tabelle benötigen und Art sowieso. Wenn Sie irgendeine Art von Ordnung des verkettete Ergebnis benötigen, können Sie einfach es auf der äußeren Abfrage, zum Beispiel durch max oder min auf dem neuesten Stand und Ordnung durch sie angewendet wird.

Andere Tipps

Dies sollte auch das tun, was Sie wollen:

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

Wilde Idee, aber funktioniert das?

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

würde ich die maximale Menge an E-Mail-Adressen in einem Datensatz vermuten sein 125.
Leider ist die Menge nicht 125 exakt Es zwischen 1 und 125 sein könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top