Maison > Questions et réponses > le corps du texte
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
高洛峰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
.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