Heim  >  Fragen und Antworten  >  Hauptteil

php – Statistikabfrage für mit MySQL verbundene Tabelle

Aktivitätstabellenprobe
id (selbst inkrementierende ID), Name (Aktivitätsname), send_time (Startzeit), UID (Benutzer-ID, die die Aktivität erstellt hat) ...
Statistischer Tabellenstatus
id (selbst inkrementierende ID), mtype (Aktivitätstyp 1, 2, 3; 1 stellt die Aktivität innerhalb der Tabellenprobe dar), sid (Quellen-ID, ID der Aktivitätstabelle), pid (Personen-ID), open_time (Zeitpunkt des Öffnens der E-Mail) ...

Fragen Sie die vom Benutzer mit Benutzer-ID 6 erstellte Aktivitätsliste ab (einschließlich Informationen: Aktivitätsname, Startzeit, Gesamtzahl der E-Mails, Gesamtzahl der geöffneten E-Mails).
open_time>0 ist die Aufzeichnung geöffneter E-Mails, feste Bedingung mtype=1 ,sid = Die aktive Tabellen-ID, die von der Probe bis uid=6 abgefragt wurde.
Jetzt wird die Abfrage separat durchgeführt und anschließend das Array verarbeitet.
Ich weiß nicht, wie ich die erforderlichen Daten in einer SQL überprüfen soll. Bitte Gott um Hilfe

天蓬老师天蓬老师2644 Tage vor1118

Antworte allen(1)Ich werde antworten

  • 高洛峰

    高洛峰2017-06-24 09:43:26

    SELECT
        R.name,
        R.send_time,
        COUNT(DISTINCT S1.id) send_times,
        COUNT(DISTINCT S2.id) open_times
    FROM rehearse R
    LEFT JOIN
        statis S1
    ON
        R.id = S1.sid AND S1.mtype = 1
    LEFT JOIN
        statis S2
    ON
        R.id = S2.sid AND S2.mtype = 1 AND open_time > 0
    WHERE
        R.uid = 6
    GROUP BY
        R.id

    由于左联了两次,可能会有效率问题,在找更优方法

    Update

    方法2:子查询

    SELECT
        R.name,
        R.send_time,
        COUNT(S.id) send_times,
        (SELECT COUNT(S.id) FROM S WHERE AND S.open_time > 0) open_times
    FROM
        rehearse R
    LEFT JOIN
        (SELECT * FROM statis WHERE mtype = 1 GROUP BY sid, open_time AND sid = R.id) S

    Antwort
    0
  • StornierenAntwort