Внесение изменений в запрос на присоединение для добавления нового значения в запрос

0

Нижеприведенный запрос работает хорошо. Он извлекает информацию из трех таблиц 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";
  • 0
    Я понял это самостоятельно. Смотри ниже.
Теги:

1 ответ

0
Лучший ответ
    $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";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню