2016-07-08 44 views
-1

我有3个表如下为了先再组通过在MySQL

问题(q_id,问题,CAT_ID)

回答(A_ID,q_id,答案,USER_ID,率)

用户(user_ID的,用户名)

现在我想一个特定类别的所有问题和它的一个答案,如果它退出具有最高的回复率和用户名。

我正在使用下面的查询来做到这一点,但它并没有给我那个答案有最高的速度。

select c.*,d.username,d.user_id 
from users d 
join (
    SELECT b.*,a.question 
    FROM `questions` a 
    left join answers b 
    on a.q_id=b.q_id 
    WHERE a.`cat_id` = 8 
    group by b.q_id) c 
on c.user_id=d.user_id 

回答

0

如果尝试一下这个:

SELECT c.*,d.username,d.user_id 
FROM users d 
JOIN (
    SELECT b.*,a.question 
    FROM `questions` a 
    LEFT JOIN (
     SELECT t1.* 
     FROM answers t1 
     JOIN (
      SELECT q_id, max(rate) AS rate FROM answers GROUP BY q_id 
     ) t2 
     ON t1.q_id = t2.q_id AND t1.rate = t2.rate 
    ) b ON a.q_id=b.q_id 
    WHERE a.`cat_id` = 8 
    GROUP BY b.q_id) c ON c.user_id=d.user_id 

因为你没有提供一些示例数据和预期的结果,所以你预计可能无法正常工作。

编辑:

SELECT q.*, a.* 
FROM questions q 
LEFT JOIN (
    SELECT t1.*, u.user_id, u.username 
    FROM answers t1 
    INNER JOIN questions t3 ON t1.q_id = t3.q_id AND t3.cat_id = 8 
    INNER JOIN (
     SELECT q_id, max(rate) AS rate FROM answers GROUP BY q_id 
    ) t2 
    ON t1.q_id = t2.q_id AND t1.rate = t2.rate 
    LEFT JOIN users u ON t1.user_id = u.user_id 
    ORDER BY t1.a_id LIMIT 1 
) a 
ON q.q_id = a.q_id 
WHERE q.cat_id = 8 
+0

如何'之外了'无济于事派生? – Drew

+0

是啊,工作很好,谢谢 –

+0

哦,我明白了,我的眼睛累了,以为它在外面。我的坏 – Drew