2016-07-08 8 views
-1

Ich habe 3 Tabellenbestellen, indem man zuerst dann die Gruppe von in mysql

folgt

Fragen (q_id, Frage, cat_id)

Antworten (a_id, q_id, Antwort, user_id, rate)

Benutzer (user_id, username)

Jetzt möchte ich alle Fragen einer bestimmten Kategorie und seine eine Antwort, wenn Ausfahrten des hat die höchste Rate und den Nutzernamen der Person, die geantwortet hat.

Ich benutze folgende Abfrage, um dies zu tun, aber es gibt mir nicht diese Antwort, die höchste Rate hat.

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 

Antwort

0

Was, wenn versuchen:

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 

Ursache Sie nicht einige Beispieldaten und gewünschte Ergebnis zur Verfügung gestellt haben, so ist dies zu erwarten, wie Sie möglicherweise nicht.

Edited:

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

Wie wird 'a' Erfolg außerhalb des abgeleitet? – Drew

+0

ja funktioniert gut danke –

+0

Oh ich sehe, meine Augen sind müde, dachte, es war außerhalb davon. Meine schlechte – Drew

Verwandte Themen