Maison  >  Questions et réponses  >  le corps du texte

php - requête statistique de table connectée mysql

Répétition de la table d'activité
id (identifiant auto-incrémenté), nom (nom de l'activité), send_time (heure de début), uid (ID utilisateur qui a créé l'activité)...
état de la table de statistiques
id (identifiant auto-incrémenté), mtype (type d'activité 1, 2, 3 ; 1 représente l'activité dans la table de répétition), sid (identifiant source, identifiant de la table d'activité), pid (identifiant de la personne), open_time (heure d'ouverture de l'e-mail)...

Interrogez la liste d'activités créée par l'utilisateur avec l'ID utilisateur 6 (y compris les informations : nom de l'activité, heure de début, nombre total d'e-mails, nombre total d'e-mails ouverts)
open_time>0 est l'enregistrement des e-mails ouverts, condition fixe mtype=1 ,sid = L'identifiant de la table active demandé depuis la répétition jusqu'à uid=6.
Maintenant, la requête est effectuée séparément, puis le tableau est traité.
Je ne sais pas comment vérifier les données requises dans un SQL. Demandez de l'aide à Dieu

天蓬老师天蓬老师2644 Il y a quelques jours1120

répondre à tous(1)je répondrai

  • 高洛峰

    高洛峰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

    Étant donné que le lien de gauche est connecté deux fois, il peut y avoir des problèmes d'efficacité. Je cherche une meilleure façon

    .

    Mise à jour

    Méthode 2 : Sous-requête

    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

    répondre
    0
  • Annulerrépondre