Hallo zusammen
Ich schaffe es wieder einmal nicht, eine etwas speziellere Abfrage zu machen und bedanke mich schon jetzt für jeden Tipp.
Mein Ziel ist eine Tabelle mit den Angaben zu den Instrumenten und deren Besitzer. Diese Tabelle sollte in etwa so aussehen: (Meine aktuelle Knacknuss sind die beiden hintersten Spalten.)
Ich habe diverse Tabellen, aus welchen die Abfrage zusammen geschustert werden soll. Ich versuche, diese Tabellen im nächsten Post anzuhängen.
Mit der ersten SQL-Abfrage erhalte ich eine Liste mit allen Angaben zu den Instrumenten, schaffe es aber nicht, die beiden "Spalten" mit den Angaben zu den Besitzern anzeigen zu lassen.
Mit der zweiten Abfrage kann ich eine Liste mit den Instrumenten und den Besitzern anzeigen lassen. Schaffe es aber nicht, dass für nicht vorhandene Angaben eine NULL ausgegeben wird. Es werden nur jene "Datensätze" angezeigt, welche vollständig vorhanden sind.
Irgendwie habe ich das Gefühl, dass ich der Lösung schon sehr nahe bin, stehe aber trotzdem noch auf dem Schlauch.
Und noch eine Zusatzfrage:
Wenn in der usd_usf_id die 235 steht, ist die usd_value (aktuell) eine Zahl von 1 bis 3. Die entsprechenden Werte sehe ich in der Tabelle adm_user_fields unter usf_value_list. Ist es möglich, im Resultat anstelle der Zahl direkt den entsprechenden Wert anzeigen zu lassen? Bislang habe ich lediglich einen Weg gefunden, dies in der SQL-Abfrage zu "übersetzen". Das heisst aber, falls die Original-Werte geändert werden, diese in der SQL-Abfrage ebenfalls wieder angepasst werden müssen.
Besten Dank für Eure Unterstützung und liebe Grüsse aus der Schweiz.
voumi
Ich schaffe es wieder einmal nicht, eine etwas speziellere Abfrage zu machen und bedanke mich schon jetzt für jeden Tipp.
Mein Ziel ist eine Tabelle mit den Angaben zu den Instrumenten und deren Besitzer. Diese Tabelle sollte in etwa so aussehen: (Meine aktuelle Knacknuss sind die beiden hintersten Spalten.)
Instrument | Bezeichnung | 114 | 117 | 119 | 120 | 121 | 123 | 124 | 126 | 132 | 134 | 135 | 136 | 161 | 162 | 234 | 235 | Nachname Besitzer | Vorname Besitzer |
Trompete | B-123456 | 123456 | Privat | Besson | versilbert | Lieferant | Neu | 1000 | ohne Zubehör | muss in Stand gesetzt werden | War in Ausstellung | Vorbesitzer | Reparatur | 500 | 01.01.2024 | unten | 1 | Nachname 2 | Vorname 2 |
Trompete | S-987456 | 987456 | Privat | Sovereign | Vorbesitzer | 2 | |||||||||||||
Klarinette | B-787878 | 1 | Nachname 3 | Vorname 3 | |||||||||||||||
Cornet | Y-898989 | 898989 | MGU | Yamaha | 3 | Nachname 4 | Vorname 4 |
Ich habe diverse Tabellen, aus welchen die Abfrage zusammen geschustert werden soll. Ich versuche, diese Tabellen im nächsten Post anzuhängen.
Mit der ersten SQL-Abfrage erhalte ich eine Liste mit allen Angaben zu den Instrumenten, schaffe es aber nicht, die beiden "Spalten" mit den Angaben zu den Besitzern anzeigen zu lassen.
SQL:
SELECT usr_id,
id1.usd_value AS Instrument,
id2.usd_value AS Nummer,
id3.usd_value AS Instrumentennummer,
id4.usd_value AS Lagerort,
id5.usd_value AS Marke,
id6.usd_value AS Farbe,
id7.usd_value AS Lieferant,
id8.usd_value AS Neu_Occ,
id9.usd_value AS Preis,
id10.usd_value AS Zubehoer,
id11.usd_value AS Diverses,
id12.usd_value AS Bemerkungen,
id13.usd_value AS Vorbesitzer,
id14.usd_value AS Reparaturen,
id15.usd_value AS Zeitwert,
id16.usd_value AS Zeitwertdatum,
id17.usd_value AS Gravurort,
id18.usd_value AS Eigentum,
mem_begin,
mem_end
FROM adm_roles, adm_categories, adm_members, adm_users
LEFT JOIN adm_user_data id1 ON id1.usd_usr_id = usr_id
AND id1.usd_usf_id = 1
LEFT JOIN adm_user_data id2 ON id2.usd_usr_id = usr_id
AND id2.usd_usf_id = 2
LEFT JOIN adm_user_data id3 ON id3.usd_usr_id = usr_id
AND id3.usd_usf_id = 114
LEFT JOIN adm_user_data id4 ON id4.usd_usr_id = usr_id
AND id4.usd_usf_id = 117
LEFT JOIN adm_user_data id5 ON id5.usd_usr_id = usr_id
AND id5.usd_usf_id = 119
LEFT JOIN adm_user_data id6 ON id6.usd_usr_id = usr_id
AND id6.usd_usf_id = 120
LEFT JOIN adm_user_data id7 ON id7.usd_usr_id = usr_id
AND id7.usd_usf_id = 121
LEFT JOIN adm_user_data id8 ON id8.usd_usr_id = usr_id
AND id8.usd_usf_id = 123
LEFT JOIN adm_user_data id9 ON id9.usd_usr_id = usr_id
AND id9.usd_usf_id = 124
LEFT JOIN adm_user_data id10 ON id10.usd_usr_id = usr_id
AND id10.usd_usf_id = 126
LEFT JOIN adm_user_data id11 ON id11.usd_usr_id = usr_id
AND id11.usd_usf_id = 132
LEFT JOIN adm_user_data id12 ON id12.usd_usr_id = usr_id
AND id12.usd_usf_id = 134
LEFT JOIN adm_user_data id13 ON id13.usd_usr_id = usr_id
AND id13.usd_usf_id = 135
LEFT JOIN adm_user_data id14 ON id14.usd_usr_id = usr_id
AND id14.usd_usf_id = 136
LEFT JOIN adm_user_data id15 ON id15.usd_usr_id = usr_id
AND id15.usd_usf_id = 161
LEFT JOIN adm_user_data id16 ON id16.usd_usr_id = usr_id
AND id16.usd_usf_id = 162
LEFT JOIN adm_user_data id17 ON id17.usd_usr_id = usr_id
AND id17.usd_usf_id = 234
LEFT JOIN adm_user_data id18 ON id18.usd_usr_id = usr_id
AND id18.usd_usf_id = 235
WHERE rol_id = 87 AND mem_begin <= NOW() AND mem_end > NOW()
AND rol_valid = 1
AND rol_cat_id = cat_id
AND cat_org_id = 1
AND mem_rol_id = rol_id
AND mem_usr_id = usr_id
AND usr_valid = 1
ORDER BY Instrument, Nummer ASC;
Mit der zweiten Abfrage kann ich eine Liste mit den Instrumenten und den Besitzern anzeigen lassen. Schaffe es aber nicht, dass für nicht vorhandene Angaben eine NULL ausgegeben wird. Es werden nur jene "Datensätze" angezeigt, welche vollständig vorhanden sind.
SQL:
SELECT
CONCAT(id1.usd_value,' ', id2.usd_value) AS name,
id3.usd_value AS Instrument,
id4.usd_value AS Nummer,
id5.usd_value AS Eigentum,
v1.mem_begin,
v1.mem_end,
ure_urt_id,
ure_usr_id1,
ure_usr_id2
FROM
adm_members v1
INNER JOIN (
adm_user_data id1
INNER JOIN (
adm_user_data id2
INNER JOIN (
adm_user_data id3
INNER JOIN (
adm_user_data id4
INNER JOIN (
adm_user_data id5
INNER JOIN
adm_user_relations
ON
id5.usd_usr_id = ure_usr_id2 AND id5.usd_usf_id = 235
)
ON
id4.usd_usr_id = ure_usr_id2 AND id4.usd_usf_id = 2
)
ON
id3.usd_usr_id = ure_usr_id2 AND id3.usd_usf_id = 1
)
ON
id2.usd_usr_id = ure_usr_id1 AND id2.usd_usf_id = 2
)
ON
id1.usd_usr_id = ure_usr_id1 AND id1.usd_usf_id = 1
)
ON
(v1.mem_rol_id = 2 OR v1.mem_rol_id = 50 OR v1.mem_rol_id = 78) AND v1.mem_usr_id = ure_usr_id1 AND ure_urt_id = 10 AND mem_begin < Now() AND mem_end > Now()
GROUP BY ure_usr_id2
ORDER BY Name ASC;
Irgendwie habe ich das Gefühl, dass ich der Lösung schon sehr nahe bin, stehe aber trotzdem noch auf dem Schlauch.
Und noch eine Zusatzfrage:
Wenn in der usd_usf_id die 235 steht, ist die usd_value (aktuell) eine Zahl von 1 bis 3. Die entsprechenden Werte sehe ich in der Tabelle adm_user_fields unter usf_value_list. Ist es möglich, im Resultat anstelle der Zahl direkt den entsprechenden Wert anzeigen zu lassen? Bislang habe ich lediglich einen Weg gefunden, dies in der SQL-Abfrage zu "übersetzen". Das heisst aber, falls die Original-Werte geändert werden, diese in der SQL-Abfrage ebenfalls wieder angepasst werden müssen.
Besten Dank für Eure Unterstützung und liebe Grüsse aus der Schweiz.
voumi