2016-04-08 6 views
-1

Ich habe ernsthafte Probleme mit der Erstellung der richtigen Abfrage für die folgenden: - Ich habe 3 Tabellen.Wie erstellt man diese sehr komplexe MySQL-Abfrage

  1. Autoren (author_id (int), author_name (varchar)),

  2. Bücher (book_id (int), BOOK_TITLE (varchar))

  3. Beitrag (book_id (int), author_id (int), prec (double)) - für die Speicherung des Prozentsatzes, wie tief ein Autor an der Erstellung eines bestimmten Buches beteiligt ist. (So ​​ein Buch kann mehr als ein Autor haben)

Und die legendäre Schwierigkeit (für mich jetzt) ​​Abfrage hat Datenbank für book_id, BOOK_TITLE zu stellen und in einer dritten Spalte alle Autoren des angegebenen Buch verketteten mit Komma und geordnet nach Partizipation. Also habe ich so viele Zeilen im Ergebnis der Abfrage wie viele Bücher, die ich in der Büchertabelle habe, und zu jedem Buch muss ich den Titel und Autoren in einer dritten Spalte bekommen. Aber wie kann eine solche MySQL-Anfrage gefälscht werden? Danke, dass du mir geholfen hast!

(I hav die Grundkenntnisse der Sprache SQL, Grundfunktionen, Keywords, aber ich konnte die richtige Abfrage nicht fälschen)

+2

Versuchen Sie, Ihren Text besser zu formatieren. Fügen Sie außerdem Beispieltabellendaten und das erwartete Ergebnis sowie Ihren aktuellen Abfrageversuch hinzu. – jarlh

+0

[Group_Concat()] (http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat) können Sie mehrere Zeilen in eine basierend auf gruppieren und sortieren Ergebnisse kombinieren durch etwas ... Prozent vielleicht für Ihre Frage. – xQbert

Antwort

0

wenig vage auf der 3. Tabelle (Namen) und die Kriterien beitreten, aber dies sollte sein close ...

Der Schlüssel hier ist die Funktion group_Concat(), die es Ihnen ermöglicht, mehrere Zeilen zu einem basierend auf der Gruppe nach Werten zu kombinieren. Zusätzlich können Sie mit der Funktion group_Concat einen Begrenzer sowie eine Reihenfolge definieren.

SELECT B.Book_ID 
    , B.Book_Title 
    , group_concat(A.Author_name order by ABP.Prec Desc separator ', ') as Authors 
FROM Author_Book_Percent ABP 
INNER JOIN AUTHORS A 
    on ABP.Author_ID = A.Author_ID 
INNER JOIN BOOKS B 
    on ABP.Book_ID = B.Book_ID 
GROUP BY B.Book_ID, B.Book_Title 
+0

Unmöglich leicht ... gleich auf mich, ich hätte es geschafft! :) Thy für Ihre Freundlichkeit! – mahtantiwele

+0

Einfach ja, aber nur wenn Sie die Group_Concat() Funktion kennen! – xQbert

+0

Ich kannte diese Funktion, aber nur allgemein ... Ich wusste nicht, dass ich eine solche Reihenfolge verwenden könnte. Dein noch einmal! – mahtantiwele