Нижеприведенный запрос работает хорошо. Он извлекает информацию из трех таблиц MySQL: логин, представление и комментарий.
Он создает значение, называемое totalScore2, основанное на вычислении значений, выведенных из этих трех таблиц.
В таблицах MySQL "комментарий" и "представление" оба поля имеют следующие поля:
loginid submissionid
В таблице "подчинение" каждый элемент "uploadid" имеет только одну запись/строку и, следовательно, связан только с одним "loginid" .
В таблице "комментарий" поле "uploadid" может иметь несколько записей/строк и может быть связано с несколькими "loginid" s.
Каждый раз, когда один из "submitid" в "комментарии" связан с тем же "loginid" , что он имеет в таблице "представление", я хотел бы добавить это как фактор к уравнению ниже. Я хотел бы несколько экземпляров, подобных этому времени (-10).
Как я могу это сделать?
Спасибо заранее,
Джон
$sqlStr2 = "SELECT
l.loginid,
l.username,
l.created,
DATEDIFF(NOW(), l.created) + COALESCE(s.total, 0) * 5 + COALESCE(scs.total, 0) * 10 + COALESCE(c.total, 0) AS totalScore2
FROM login l
LEFT JOIN (
SELECT loginid, COUNT(1) AS total
FROM submission
GROUP BY loginid
) s ON l.loginid = s.loginid
LEFT JOIN (
SELECT loginid, COUNT(1) AS total
FROM comment
GROUP BY loginid
) c ON l.loginid = c.loginid
LEFT JOIN (
SELECT S2.loginid, COUNT(1) AS total
FROM submission S2
INNER JOIN comment C2
ON C2.submissionid = S2.submissionid
GROUP BY S2.loginid
) scs ON scs.loginid = l.loginid
GROUP BY l.loginid
ORDER BY totalScore2 DESC
LIMIT 25";
$sqlStr3 = "SELECT
l.loginid,
l.username,
l.created,
DATEDIFF(NOW(), l.created) + COALESCE(s.total, 0) * 5 + COALESCE(scs.total, 0) * 10 - COALESCE(nscs.total, 0) * 10 + COALESCE(c.total, 0) AS totalScore2
FROM login l
LEFT JOIN (
SELECT loginid, COUNT(1) AS total
FROM submission
GROUP BY loginid
) s ON l.loginid = s.loginid
LEFT JOIN (
SELECT loginid, COUNT(1) AS total
FROM comment
GROUP BY loginid
) c ON l.loginid = c.loginid
LEFT JOIN (
SELECT S2.loginid, COUNT(1) AS total
FROM submission S2
INNER JOIN comment C2
ON C2.submissionid = S2.submissionid
GROUP BY S2.loginid
) scs ON scs.loginid = l.loginid
LEFT JOIN (
SELECT S2.loginid, COUNT(1) AS total
FROM submission S2
INNER JOIN comment C2
ON C2.submissionid = S2.submissionid
AND C2.loginid = S2.loginid
GROUP BY S2.loginid
) nscs ON nscs.loginid = l.loginid
GROUP BY l.loginid
ORDER BY totalScore2 DESC
LIMIT 25";