Mysql Wie kann ich 2 Sätze von Ergebnissen in einer einzigen Abfrage aus derselben Tabelle holen?

8

Ich habe mysql Tabelle der Kommentare, so.

%Vor%

jetzt kann ich Kommentare von diesem und Benutzernamen von einer anderen Tabelle mit INNER JOIN Abfrage wie folgt holen.

Ich kann die Top 3 Kommentare erhalten ORDER BY comments.ratings DESC

%Vor%

und

regelmäßige Kommentare erhalten ORDER BY comments.datetime DESC.

%Vor%

was ich versuche zu tun ist, zeigen Benutzer die Top-3-Kommentare nach ihren Bewertungen zuerst und dann regelmäßige Kommentare Reihenfolge von comments.datetime DESC.

Nun, wie kann ich über zwei mysql-Abfragen in eins verbinden?

    
AMB 06.04.2015, 16:38
quelle

3 Antworten

9

Wie die andere Antwort sagt - können Sie Ergebnisse kombinieren mit union - was einfach bedeutet, zwei Ergebnisse zusammen zu verbinden. Beachten Sie jedoch, dass Sie union nicht direkt mit diesen beiden Abfragen verknüpfen können, da sie order by verwenden. Daher müssen wir sie in äußere Abfragen einschließen und eine Rankingvariable verwenden, um dies sicherzustellen rekonstruiere die Vereinigung in der Reihenfolge, die wir wollen:

%Vor%

union ist standardmäßig distinct , was bedeutet, dass Zeilen, die in beiden Ergebnismengen gefunden wurden, nicht dupliziert werden. Es gibt jedoch auch keine Garantie dafür, dass die Zeilen in der erwarteten Reihenfolge zurückgegeben werden Tabelle mit einem eigenen Wert tbl und dann order by dieses Feld.

Wenn Sie sicher waren, dass es keine Duplikate geben würde, könnten Sie die Dublettenprüfung mit union all anstelle von union

eliminieren     
pala_ 01.05.2015, 06:19
quelle
1

Um Ihre Frage zu beantworten, können Sie Ihre Abfragen mit UNION aber

kombinieren
  

Was ich versuche zu tun, ist Benutzern die Top 3 Kommentare von ihren zu zeigen   Bewertungen zuerst und dann regelmäßige Kommentare nach Kommentaren   DESC

Wenn Sie versuchen, etwas wie die Funktionalität der Kommentare von stackoverflow zu erreichen, wo die besten Kommentare (oder Kommentare mit upvotes) zuerst angezeigt werden, dann denke ich, dass separate Abfragen gut genug sind

Wenn Ihre Suchanfrage kombiniert wird, muss der Nutzer alle und regulären Kommentare laden . Es ist auch irgendwie schwer, eine Paginierung mit großer Abfrage zu erstellen oder zu implementieren, die UNION hat (basierend auf meiner Erfahrung, weil ich immer noch ein Noob beim Codieren bin)

  

Disclaimer: HARD, aber nicht unmöglich

Wenn ich derjenige bin, der dieses Problem programmiert, wird zuerst mein Programm die Top 3 Kommentare laden, danach gibt es einen 'Zeige mehr Kommentare' Knopf, der mit AJAX auf meinen Server schreibt und das Ergebnis anfügt ( regelmäßige Kommentare) zur Liste der angezeigten Kommentare. Damit müssen Abfragen getrennt von dem sein, was Sie jetzt haben

    
Ceeee 05.05.2015 08:01
quelle
0

Um Ergebnismengen übereinander zu einem Satz zu stapeln, müssen Sie eine "UNION" - Ссылка

    
ioscode 06.04.2015 16:42
quelle

Tags und Links