2016-07-08 2 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

Как 'a' польза вне производный? – Drew

+0

Да, отлично работает спасибо –

+0

О, я вижу, мои глаза устали, подумал, что это вне его. Мой плохой – Drew

Смежные вопросы