-
Hallo,
ich komm an einer Stelle nicht mehr weiter. Wer kann mir schnell helfen und für wieviel? Bitte per PN schreiben!
Ich habe eine riesen Tabelle, die ich so auslesen muss, dass ich am Ende je $row nur eine id_firma habe, zu dieser die Anzahl der id_auto und der id_auto_preis. Zusätzlich muss ich wissen, welche Farben alle verfügbar sind. Das heißt, aus der Spalte color sollen später vier Spalten entstehen mit den jeweiligen farben als Boolean.
Ich brauche hierzu das korrekten SQL-Statement:
Tabelle
`id_auto_preis`
`id_auto`
`id_firma`
`year`
`color` ('n','r','b','s')
Output
Je Zeile eine id_firma von Jahr XXXX, die Spalten sehen dann wie folgt aus:
$row['id_firma']; <--- 'id_firma' um die es in dieser Zeile geht, darf immer nur einmal vorkommen
$row['autos']; <--- Anzahl aller 'id_auto' für die jeweilige id_firma
$row['preise']; <--- Anzahl aller 'id_auto_preis' für die jeweilige id_firma
$row['navy']; <--- 1 wenn 'id_firma' mindestens ein mal 'color' = 'n' hat, ansonsten 0
$row['red']; <--- 1 wenn 'id_firma' mindestens ein mal 'color' = 'r' hat, ansonsten 0
$row['black']; <--- 1 wenn 'id_firma' mindestens ein mal 'color' = 'b' hat, ansonsten 0
$row['silver']; <--- 1 wenn 'id_firma' mindestens ein mal 'color' = 's' hat, ansonsten 0
Die Einträge könnten in der Tabelle so aussehen:
1 2345 117 2008 n
2 2345 117 2008 b
3 2346 117 2008 b
4 2346 117 2008 n
5 2346 117 2008 n
6 4488 118 2008 r
7 4488 118 2008 r
8 4489 118 2008 b
9 4489 118 2008 b
...
Gruß
-
Select
If_Firma,
Count(distinct id_Auto),
count(Distinct id_Auto_Preis),
Min(Case when color= 'r' them 'ja' Else 'nein' end) As Red,
... alle farben
From table
Group by id_Firma
Sry für die schlechte Formatierung war grad zufällig am iPhone on und hab leider nicht die Tutorials App. Hoff dann wird es besser so ist es echt grauenhaft etwas zu schreiben
So Long
Vandampm.f.g
b. zimmel
-
Super danke!
Ich werde es gleich mal testen. Wenn es funktioniert, zahl ich natürlich gerne dafür
-
Hmm schade. Das funktioniert leider auch nicht. Hab die Rechtschreibfehler auch soweit korrigiert. Nur leider führt er das Statement nicht aus ;(
-
Code sql:
1 2 3 4 5 6 7 8 9 10 11 12
SELECT id_firma, COUNT(DISTINCT id_auto) AS autos, COUNT(DISTINCT id_auto_preis) AS preise, MAX(color='n') AS navy, MAX(color='r') AS red, MAX(color='b') AS black, MAX(color='s') AS silver FROM mytable GROUP BY id_firma
Ungetestet und mit 2 Promille - Prost---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Danke für die Hilfe, aber irgendwie klappt es nicht. Vllt hängt das einfach mit der Größe der Tabelle zusammen. Die hat mehrere Millionen Einträge. Hab schon vieles probiert, aber bislang ohne Erfolg. Hab das Ganze in einem Try-Catch-Block und sobald ich das 'count' in das Statement rein setze springt er aus dem Ding raus und macht nix.
Ich versteh das nicht.
EDIT: Der springt NUR raus, wenn das count in Kombination mit anderen Befehlen steht. Das selbe gilt für die MAX Funktion. Ich weiß aber noch nicht warum.Geändert von Tommy57 (29.01.11 um 04:55 Uhr)
-
Was gibt der catch-Block für eine Fehlermeldung?
Ist Performance ein Thema oder ist das egal? Wen ja, setzte mehrere SQLs ab und hole die Infos einzeln
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
SELECT id_firma, COUNT(DISTINCT id_auto) AS autos FROM mytable GROUP BY id_firma; SELECT id_firma, MAX(color='n') AS navy FROM mytable GROUP BY id_firma; --etc
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hi,
nein, Performance ist kein Thema. Das Resultat wird danach gecached. Kann man es denn irgendwie so schreiben, dass man mehrere Statements verschachtelt?
EDIT: Also so, dass es im Endeffekt trotzdem nur ein Statement ist.
Die Fehlermeldung kann ich aktuell nicht sagen, weil die Log-Datei merkwürdigerweise leer ist. So ein Mist...Geändert von Tommy57 (29.01.11 um 12:48 Uhr)
-
hmm kannst du auf mehrere arten lösen.
Die Performance wir dadurch allerdings nicht besser, aber nen Versuch ist es wert.
per union oder per join.
JOIN variante
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
SELECT a.id_firma, a.autos, n.navy FROM( SELECT id_firma, COUNT(DISTINCT id_auto) AS autos FROM test GROUP BY id_firma ) a JOIN( SELECT id_firma, MAX(color='n') AS navy FROM test GROUP BY id_firma ) n ON n.id_firma = a.id_firma
UNION
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
SELECT id_firma, SUM(autos) AS autos, SUM(navy) AS navy FROM ( SELECT id_firma, COUNT(DISTINCT id_auto) AS autos, 0 AS navy FROM test GROUP BY id_firma UNION SELECT id_firma, 0 AS autos, MAX(color='n') AS navy FROM test GROUP BY id_firma ) n GROUP BY id_firma
P.S.: braucht du es nur 1 mal oder musst du es regelmäßig ausführen?
Ansonsten würd ich alle Werte einzeln ermitteln, wenn es funktioniert und dann im excel per sverweis verbinden.Geändert von vandamp (29.01.11 um 15:47 Uhr)
m.f.g
b. zimmel
-
WOooooOW, sieht gut aus. Also der lädt schon seit n paar Minuten, aber sieht richtig gut aus

Hab jetzt mal die erste Variante genommen. Welche ist denn besser?
Wie müsste ich das denn jetzt noch anpassen, damit ich die restlichen Farben noch kriege und count(DISTINCT id_auto_preis) und wo kommt da die WHERE Bedingung hin?
-
ja hmm welche Variante besser ist kann ich nicht sagen müsstest du mal auf den Explainplan schauen, aber denke die Join Version ist "besser".
hab dir noch ein paar Farben hinzugefügt und alles auf id_firma = 117 beschränkt.
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
SELECT a.id_firma, a.autos, p.preis, n.navy, r.red, b.black, s.silver FROM( SELECT id_firma, COUNT(DISTINCT id_auto) AS autos FROM test WHERE id_firma = 117 GROUP BY id_firma ) a JOIN( SELECT id_firma, COUNT(DISTINCT id_auto_preis) AS preis FROM test WHERE id_firma = 117 GROUP BY id_firma )p ON p.id_firma = a.id_firma LEFT JOIN( SELECT id_firma, MAX(color='n') AS navy FROM test WHERE id_firma = 117 GROUP BY id_firma ) n ON n.id_firma = a.id_firma LEFT JOIN( SELECT id_firma, MAX(color='r') AS red FROM test WHERE id_firma = 117 GROUP BY id_firma ) r ON r.id_firma = a.id_firma LEFT JOIN( SELECT id_firma, MAX(color='b') AS black FROM test WHERE id_firma = 117 GROUP BY id_firma ) b ON b.id_firma = a.id_firma LEFT JOIN( SELECT id_firma, MAX(color='s') AS silver FROM test WHERE id_firma = 117 GROUP BY id_firma ) s ON s.id_firma = a.id_firma
m.f.g
b. zimmel
-
1.000 Danke. Das hätte ich alleine nicht hingekriegt. Also er läuft gerade. Ich sag bescheid, wenn er fertig ist, kann jetzt bestimmt 10 Minuten dauern
-
Es hat geklappt

Das freut mich jetzt richtig. DANKE******
Wie versprochen: Schick mir einfach per PN irgendwas(PayPAL, Bankverbindung, Anschrift), dann schick ich dir schon mal 50€. Hoffe, das ist nicht zu wenig.
Ich bräuchte jetzt noch eine Sache
Aktuell werden mir alle Firmen gelistet, die Verkäufe hatten. Ich habe hier noch eine Tabelle dort sind ALLE Firmen drin. Ich müsste nun nur noch alle fehlenden (hier auch wieder DISTINCT, weil die FirmenIDs in der Firmen-Tabelle häufiger vorkommen) hinzufügen. In der selbigen Tabelle stehen auch noch die ganzen Firmennamen, und wäre es dann noch möglich, die Namen zusätzlich Alphabetisch zu sortieren?
-
freut mich, dass es geklappt hat.
zahlen musst du nichts, steht ja nicht in der Rubrik entgeltlich und das Motto eines jeden Forums ist User helfen Usern.
Wenn es dir ein anliegen ist, spende es lieber tutorials.de ( falls überhaupt möglich habe eigentlich noch keinen Button gesehen) oder einer gemeinnützigen Organisation.
nun noch die Lösung deines Problems.
Wie auch oben habe ich in der where bedingung alles auf firma 117 eingeschränkt - musst du ggf. anpassen.
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
SELECT alle.id_firma, alle.name_firma, alle.adresse_firma, a.autos, p.preis, n.navy, r.red, b.black, s.silver FROM( SELECT DISTINCT id_firma, name_firma, adresse_firma FROM test2 WHERE id_firma = 117 ) alle LEFT JOIN( SELECT id_firma, COUNT(DISTINCT id_auto) AS autos FROM test WHERE id_firma = 117 GROUP BY id_firma ) a ON a.id_firma = alle.id_firma LEFT JOIN( SELECT id_firma, COUNT(DISTINCT id_auto_preis) AS preis FROM test WHERE id_firma = 117 GROUP BY id_firma )p ON p.id_firma = alle.id_firma LEFT JOIN( SELECT id_firma, MAX(color='n') AS navy FROM test WHERE id_firma = 117 GROUP BY id_firma ) n ON n.id_firma = alle.id_firma LEFT JOIN( SELECT id_firma, MAX(color='r') AS red FROM test WHERE id_firma = 117 GROUP BY id_firma ) r ON r.id_firma = alle.id_firma LEFT JOIN( SELECT id_firma, MAX(color='b') AS black FROM test WHERE id_firma = 117 GROUP BY id_firma ) b ON b.id_firma = alle.id_firma LEFT JOIN( SELECT id_firma, MAX(color='s') AS silver FROM test WHERE id_firma = 117 GROUP BY id_firma ) s ON s.id_firma = alle.id_firma ORDER BY alle.name_firma ASC
Geändert von vandamp (29.01.11 um 17:20 Uhr)
m.f.g
b. zimmel
-
Ja, du hast sicherlich recht, dass dieses Forum dem Zweck dient zu helfen, aber das hier war ja keine Kleinigkeit. Mich hat das richtig lang aufgehalten und ich habe ja auch oben geschrieben, dass ich dafür auch zahlen möchte. Es liegt bei dir, aber mit dem neuen Code-Block würde ich dir schon 70 Euro überweisen, du hast dir ja auch die ganzen Mühe gemacht. Finde ich nur gerecht.
Ähnliche Themen
-
Wer kann mir helfen?
Von MoJo48 im Forum Java GrundlagenAntworten: 11Letzter Beitrag: 23.11.09, 10:54 -
Wer kann uns helfen ?
Von Fluglehrer im Forum Flash PlattformAntworten: 0Letzter Beitrag: 07.04.08, 17:07 -
Wer kann helfen? Wie kann ich im Photoshop mein Logo mit Gras "überziehen"?
Von LA-Chiller im Forum PhotoshopAntworten: 14Letzter Beitrag: 09.03.07, 16:31 -
Wer kann helfen?
Von chrissbk im Forum PHPAntworten: 4Letzter Beitrag: 01.08.05, 21:23 -
Wer kann helfen
Von christiandickel im Forum PHPAntworten: 1Letzter Beitrag: 11.10.04, 22:01



10Danke

Zitieren

Login





