2017-12-27 11 views
2

Ich möchte Kategorien nach Anzahl der Besuche sortierenWie man mehrere Tabellen mit Summe verbindet

Kategorien haben Aufgaben, Aufgaben haben Besuche. Ich habe vier Tabellen:

1)visits 
    -id 

2)category 
    -id 

3)tasks 
    -id 
    -category_id 

4)task_visit 
    -task_id 
    -visit_id 

Was ich im Moment haben:

-sort Aufgaben durch Besuche

SELECT count(task_id) as count, task_id 
FROM task_visit 
GROUP BY task_id 
ORDER BY count DESC; 

-join Kategorien mit Aufgaben

SELECT * 
FROM categories 
JOIN tasks 
    ON categories.id = tasks.category_id 
ORDER BY categories.id; 

-Versuchen beitreten Kategorien mit Aufgaben und zählen Besuche (funktioniert nicht), dass in der nächsten Summe nach Kategorie

SELECT * 
FROM categories 
JOIN tasks 
    ON categories.id = tasks.category_id 
ORDER BY categories.id 
JOIN 
(
    SELECT count(task_id) as count, task_id 
    FROM task_visit 
    GROUP BY task_id 
    ORDER BY count 
) ON tasks.id = task_visit.task_id; 

Also, wie sortieren Kategorien nach Nummer?

+0

Können Sie die Tabellen wie in der [post] (https hinzufügen: // Meta. stackexchange.com/questions/220127/how-to-make-tables-in-good-format-in-asking-queshere-which-is-understand)? – dev8989

+1

Geben Sie einige Beispieldaten und was ist Ihr erwartetes Ergebnis. – DineshDB

Antwort

2

Sie müssen nur eine Verbindung zwischen den category, tasks und task_visit Tabellen, zusammen mit einer Ansammlung von Kategorie:

SELECT 
    c.id, 
    COUNT(tv.visit_id) AS cnt 
FROM category c 
LEFT JOIN tasks t 
    ON c.id = t.category_id 
LEFT JOIN task_visit tv 
    ON tv.task_id = t.id 
GROUP BY 
    c.id 
ORDER BY cnt DESC; 
Verwandte Themen