Hallo zusammen,
ich habe ein Problem mit einer Abfrage, welche mir die Fehlermeldung
ausgibt. Ich habe nun schon eine Zeit mit "meiner" Abfrage gearbeitet, allerdings vermute ich, dass ich jetzt zu viele Daten in den Tabellen habe, wodurch dieser Fehler nun auftritt.
Erstmal eine kurze Erklärung was ich machen will. Es handelt sich um eine Kurierdienstsoftware, wo ich die Abrechnungen für die Fahrer ausgeben möchte. Die Abrechnung wurde also schon erstellt. Die Struktur ist folgende: Es gibt Aufträge (Tabelle "auftrag"), welchen die Stops (z.B. Absender 1, Empfänger 1, Empfänger 2; Tabelle "auftrag_stops"), die Fahrer (z.B. Fahrer 1, Fahrer 2; Tabelle "auftrag_fahrer") und die jeweilige Abrechnung, auf der der Auftrag enthalten ist (Tabelle "abrechnung") zugeordnet sind. Folgendes soll nun gemacht werden:
Ich möchte mir anhand der ID der Abrechnung alle Aufträge, die dieser Abrechnung (mit der Tabelle auftrag_abrechnung) zugeordnet sind, ausgeben. Dazu soll der Preis des Fahrers, zu dem die Abrechnung gehört, und der zum Auftrag gehört, ausgegeben werden. Das ganze soll dann noch nach dem timestamp des 1. Stops des jeweiligen Auftrages sortiert werden. Außerdem enthält jede Tabelle noch die Spalte "firma", welche die ID der Firma gehört, der der jeweilige Datensatz zugeordnet ist. Dies halte ich für notwendig, da verschiedene Kurierfirmen sich die Datenbank teilen und ich einen Zugriff auf fremde Daten vermeiden will. Die ID der Firma kommt aus der jeweiligen Session des angemeldeten Benutzers. Das ganze soll dann noch nach dem Datum des zum jeweiligen Auftrag gehörenden ersten Stops (pos = 1) sortiert werden.
Hier ist meine Abfrage:
Hier die dazugehörigen Tabellen:
auftrag
auftrag_fahrer
auftrag_stops
auftrag_abrechnung
abrechnung
Ich vermute, dass das ganze über Joins funktioniert, habe allerdings nicht wirklich eine Ahnung wie. Ich habe schon einige Tutorials gelesen, finde aber nichts mit mehreren Tabellen. Ich wäre sehr froh wenn mir jemand dabei helfen könnte. Die mysql-Version ist MySQL-Client-Version: 5.0.51a.
Vielen Dank schonmal.
Gruß David
ich habe ein Problem mit einer Abfrage, welche mir die Fehlermeldung
SQL:
The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay
Erstmal eine kurze Erklärung was ich machen will. Es handelt sich um eine Kurierdienstsoftware, wo ich die Abrechnungen für die Fahrer ausgeben möchte. Die Abrechnung wurde also schon erstellt. Die Struktur ist folgende: Es gibt Aufträge (Tabelle "auftrag"), welchen die Stops (z.B. Absender 1, Empfänger 1, Empfänger 2; Tabelle "auftrag_stops"), die Fahrer (z.B. Fahrer 1, Fahrer 2; Tabelle "auftrag_fahrer") und die jeweilige Abrechnung, auf der der Auftrag enthalten ist (Tabelle "abrechnung") zugeordnet sind. Folgendes soll nun gemacht werden:
Ich möchte mir anhand der ID der Abrechnung alle Aufträge, die dieser Abrechnung (mit der Tabelle auftrag_abrechnung) zugeordnet sind, ausgeben. Dazu soll der Preis des Fahrers, zu dem die Abrechnung gehört, und der zum Auftrag gehört, ausgegeben werden. Das ganze soll dann noch nach dem timestamp des 1. Stops des jeweiligen Auftrages sortiert werden. Außerdem enthält jede Tabelle noch die Spalte "firma", welche die ID der Firma gehört, der der jeweilige Datensatz zugeordnet ist. Dies halte ich für notwendig, da verschiedene Kurierfirmen sich die Datenbank teilen und ich einen Zugriff auf fremde Daten vermeiden will. Die ID der Firma kommt aus der jeweiligen Session des angemeldeten Benutzers. Das ganze soll dann noch nach dem Datum des zum jeweiligen Auftrag gehörenden ersten Stops (pos = 1) sortiert werden.
Hier ist meine Abfrage:
SQL:
SELECT
auftrag_stops.ab_ts AS datum,
auftrag.id AS id,
auftrag.tarif_id AS tarif,
auftrag_fahrer.preis AS preis
FROM auftrag, auftrag_fahrer, auftrag_stops, abrechnung, auftrag_abrechnung
WHERE
(auftrag_abrechnung.abrechn_id = '14' AND auftrag_abrechnung.firma = '2') AND
(abrechnung.id = '14' AND auftrag_abrechnung.firma = '2') AND
(auftrag_fahrer.auftr_id = auftrag.id AND auftrag_fahrer.firma = '2') AND
auftrag_fahrer.fahrer_id = abrechnung.fahrer_id AND
auftrag.id = auftrag_abrechnung.auftr_id AND
auftrag_stops.auftr_id = auftrag.id AND
auftrag_stops.pos = '1' ORDER BY datum
Hier die dazugehörigen Tabellen:
auftrag
SQL:
id firma
1 2
2 2
3 2
auftrag_fahrer
SQL:
id fahrer_id auftr_id preis firma
1 1 1 15.00 2
2 1 2 20.00 2
3 1 3 12.50 2
4 2 3 12.50 2
auftrag_stops
SQL:
id auftr_id pos datum firma
1 1 1 1234567890 2
2 1 2 1234567891 2
3 2 1 1234567895 2
4 2 2 1234567896 2
5 3 1 1234567897 2
6 3 2 1234567899 2
7 3 3 1234567900 2
auftrag_abrechnung
SQL:
id auftr_id abrechn_id firma
1 1 1 2
2 2 1 2
3 3 1 2
abrechnung
SQL:
id fahrer_id firma
1 1 2
Ich vermute, dass das ganze über Joins funktioniert, habe allerdings nicht wirklich eine Ahnung wie. Ich habe schon einige Tutorials gelesen, finde aber nichts mit mehreren Tabellen. Ich wäre sehr froh wenn mir jemand dabei helfen könnte. Die mysql-Version ist MySQL-Client-Version: 5.0.51a.
Vielen Dank schonmal.
Gruß David