Daten aus Subquery mit auslesen

Hallo yaslaw,

so ganz steige ich da noch nicht hinter:

SQL:
SELECT -- der Teil hier ist ja logisch
    m.title,
    a.a,
    a.b,
    a.c
FROM
    (
        SELECT
            p_all.a_id -- Die brauche ich für die INNER JOINS am Ende des Querys?
            p_all.m_id
        FROM
            a
            INNER JOIN p AS p_select        ON p_select.a_id = a.id -- Schnittmenge von allen Autoren mit der selben paar_id?
            INNER JOIN p AS p_all           ON p_all.m_id = p_select.m_id -- Schnittmenge von allen Paaren mit m_id?
        WHERE
            FIELD('suche', a.a, a.b, a.c) != 0
    ) AS p1
    INNER JOIN a ON p1.a_id = a.id -- Alle Autoren mit der vorher gefundenen paar_id
    INNER JOIN m ON p1.m_id = m.id -- Alle m_ids mit der vorher gefunden id

Naja vielleicht kommt es mir so langsam, bin mir aber unsicher ob ich das schon replizieren könnte. Kennst du (oder jemand anders) eventuell ein gutes MySQL Buch, was sich mit soetwas auseinander setzt?

Dann habe ich außerdem noch eine Frage dazu, ich würde die Daten nach Autoren gruppieren (GROUP BY löscht mir leider alles bis auf einen Autor raus) bzw nach gruppierten Autoren sortieren. Ist das möglich in MySQL oder muss ich dazu über die Programmiersprache meiner Wahl gehen?
Ich würde z.B. gerne nach dem Feld a.a sortieren, am besten ein Beispiel dazu:

Code:
--Datensatz: (id | a.a) (nur die beiden Felder aus Übersichtsgründen

1 | a
1 | g
1 | m
2 | n
3 | u
3 | c
3 | d
4 | e
4 | t
4 | r

-- Soll sortiert werden, zu:
1 | a --- a ist zuerst
1 | g
1 | m
4 | e -- dann e
4 | t
4 | r
2 | n -- dann n
3 | u -- dann u
3 | c
3 | d

Wenn es von Hilfe ist, es gibt noch das Feld p.reihenfolge, was die Reihenfolge der Namen zu jeder ID angibt.
 
Ein SQL-Buch? Keine Ahnung, hab noch nie eines gelesen.

Dein Gruppierungspeispiel versteh ich nicht.. Was willst du? Und warum sollen bei einem GROUP BY autor die anderen Autoren wegfallen?
 
Dann habe ich das wahrscheinlich falsch formuliert.

Angenommen ich habe die folgenden Datensätze:
Code:
m_id----|autor---|reihenfolge
----1----|Peter---|1
----1----|Klaus---|2
----1----|Stefan--|3
----2----|Bernd---|1
----2----|Mark----|2
----3----|Chris----|1
----3----|Hans----|2
----3----|Peter---|3
Ich möchte das jetzt gerne nach dem jeweils 1. Autor sortieren (wenn möglich gerne auch nach den anderen).
Sortiere ich das jetzt einfach nach der Spalte autor, werden diese quasi auseinander gerissen, denn dann wäre die Reihenfolge ja Bernd, Chris, Hans,... die zugehörigen m_ids aber nicht mehr "ein Block", sondern 2, 3, 3, 1, 2, 3, 1, 1. Ich würde die nun gerne so sortiert haben:
Code:
-- ORDER BY autor
m_id----|autor----|reihenfolge
----2----|Bernd---|1 ---- Bernd steht im Alphabet vor Peter und Chris. Also stehen alle Bücher mit m_id 2 als erstes
----2----|Mark----|2
----3----|Chris----|1 --- nach Bernd folgt das Buch mit Chris als erstem Autor
----3----|Hans----|2
----3----|Peter---|3
----1----|Peter---|1 --- Anschließend kommt Peter nach Bernd und Chris
----1----|Klaus---|2
----1----|Stefan--|3
 
SQL:
SELECT
	my_table.m_id,
	my_table.autor
FROM
		my_table
		INNER JOIN (
				-- Beliebiges Query das den Sort-Wert pro m_id ausgibt
				SELECT
					m_id,
					MIN(autor) AS sort_value
				FROM
					my_table
				GROUP BY 
					m_id
			) AS sort_1
			ON my_table.m_id = sort_1.m_id
ORDER BY
	-- Sortieren nach dem Sortierungswert
	sort_1.sort_value,
	-- und nach dem Autor
	my_table.autor
 
Zuletzt bearbeitet von einem Moderator:
Zurück