# MySQL Abfrage Problem :-)



## Bluedaishi (21. Dez 2012)

Guten Abend an alle die hier sind und nicht beim Shoppen 

Mein problem   ist Folgendes 

        Ich habe eine Tabelle mit etwa 15 spalten unter anderem ist eine Spalte vorhanden mit einer
        einer vorgangsnr die bei jedem eintrag um eins erhöht wird.

        So nun möchte ich alle mir die vorgangsnr ausgeben lassen und die anzahl der zeilen die unter
        der selben vorgangsnr abgelegt wurden z.b können unter einer vorgangsnr 44 und mehr einträge    
        sein.

        Das ganze muss ich dann in ein Jtable packen das habe ich auch schon soweit nur das ich immer   
        zwei zeilen mit den selben werten bekomme.

        das ganze soll so aussehen

        vorgangsnr        Kassierungs Datum       Anzahl
              1                    12.12.2012                40
              2                    10.10.2012                 3
              3                    10.09.2012                84

bis jetzt hab ich das probiert aber es geht nicht



```
SELECT vorgangsnr, DatumZeit, kassdatum, COUNT(*) FROM statistik WHERE ca_id ='" + Statistikmenue.getHalle() + "'GROUP BY vorgangsnr, datumzeit ORDER BY datumzeit, vorgangsnr
```


ich hoffe ihr könnt mir etwas weiter helfen

:rtfm:;(;(;(


----------



## Bluedaishi (21. Dez 2012)

hier noch das ganze Statement 


```
rs = stmt.executeQuery("SELECT vorgangsnr, DatumZeit, kassdatum, COUNT(*) FROM statistik WHERE casino_id ='" + Statistikmenue.getHalle() + "'GROUP BY vorgangsnr, datumzeit ORDER BY datumzeit, vorgangsnr");
			
			
			rsmd = rs.getMetaData(); 
			columnCount = rsmd.getColumnCount();
			String[] row = new String[columnCount];
						
					rs.next();
					
				System.out.println(Statistikmenue.getHalle());
				while (rs.next()){	
					int i = 1;
					
					while(i<columnCount+1){
					
					row [0] = rs.getString("vorgangsnr");
					row [1] = rs.getString("DatumZeit");
					row [2] = rs.getString("kassdatum");
					row [3] = rs.getString("COUNT(*)");
					i++;
				}	
				rows.add(row);
			
				}
```


----------



## Camill (21. Dez 2012)

Ich verstehe ehrlich gesagt nicht genau was du vorhast.
Die "vorgangsnr" wird bei jedem Eintrag erhöht, kann jedoch mehrfach vorkommen. Wie kommt es dazu?
Was genau möchtest du nun aus der DB auslesen?


----------



## Bluedaishi (21. Dez 2012)

hey  erstmal danke für deine schnelle antwort 

so ich habe mehrer kassierungs vorgänge in einem monat diese werden alle unter der selben vorgangsnr abgelegt wenn ich jetzt 
die nächste kassierung starte wird erst die vorgangsnr um 1 erhöht 

ich will alle zeilen unter der selben vorgangsnr in einem JTable darstellen nur die anzahl der einträge 

ich hoffe ich konnte mich jetzt besser ausdrücken


----------



## Bluedaishi (21. Dez 2012)

so soll es aussehen 

                  vorgangsnr         Kassierungsdatum           anzahl
                         1                      30.12.2012                 12
                         2                      30.11.2012                 13
                         3                      30.10.2012                 20


und so sieht es jetzt aus :-(

                  vorgangsnr           Kassierungsdatum          anzahl
                       1                        30.12.2012                 12
                       1                        30.12.2012                 12
                       1                        30.12.2012                 12


----------



## Camill (21. Dez 2012)

Wie liegen die Daten denn in der DB vor? Poste mal die genaue Struktur & Daten, das würde weiterhelfen.


----------



## Bluedaishi (21. Dez 2012)

ich denke das problem wird wohl eher in der schleife als in der abfrage liegen


----------



## Bluedaishi (21. Dez 2012)

die einzelen spalten ????


----------



## Bluedaishi (21. Dez 2012)

also wie soll ich da anfangen


            idstatistik = int(2);
            vorgangsnr = int (5);
            firmen_id = int (2);
            kassdatum = varchar(25);
            datumzeit = Timestamp();

es sind noch mehr aber die liegen alle als varchar(25) vor .

ich hoffe es war das richtige


----------



## Camill (21. Dez 2012)

Hatte mir den Code von dir nicht angeschaut, da sind einige Fehler.
[c]rs.next()[/c] stellt den Cursor auf den nächsten Datensatz, deßhalb ist der Aufruf von [c]rs.next()[/c] vor der while-Schleife falsch. Die innere while-Schleife ergibt für mich auch keinen Sinn.

```
rs = stmt.executeQuery("SELECT vorgangsnr, DatumZeit, kassdatum, COUNT(*) FROM statistik WHERE casino_id ='" + Statistikmenue.getHalle() + "'GROUP BY vorgangsnr, datumzeit ORDER BY datumzeit, vorgangsnr");

rsmd = rs.getMetaData(); 
columnCount = rsmd.getColumnCount();
String[] row = new String[columnCount];

System.out.println(Statistikmenue.getHalle());
while (rs.next()) {
    row [0] = rs.getString("vorgangsnr");
    row [1] = rs.getString("DatumZeit");
    row [2] = rs.getString("kassdatum");
    row [3] = rs.getString("COUNT(*)"); // das hier dürfte auch falsch sein da die Spalte keinen Namen hat

    rows.add(row);
}
```


----------



## Bluedaishi (21. Dez 2012)

Nein der COUNT(*) gibt die anzahl der Einträge wieder das ist auch keine Spalte nur eine MySQL anweisung

okay wie würdest du es denn machen  ??


----------



## Camill (21. Dez 2012)

Entweder mit [c]rs.getString(4)[/c] auf die Anzahl zugreifen oder durch vergeben eines Spaltennamen ([c]COUNT(*) AS 'Anzahl'[/c]), dann kannst du per [c]rs.getString("Anzahl")[/c] zugreifen.

Edit: Sehe gerade das dies nicht nötig ist, [c]rs.getString("COUNT(*)")[/c] sollte ausreichen.


----------



## Bluedaishi (21. Dez 2012)

und was ist an meiner while schleife falsch ????? 
ich lass mir gerne meine fehler zeigen


----------



## Camill (21. Dez 2012)

Verbesserungsvorschlag hatte ich oben gepostet, hier auch nochmal eine kleine Erklärung zu deiner while-Schleife:

```
rs.next();
                    
System.out.println(Statistikmenue.getHalle());
while (rs.next()){ // wird (AnzahlDatensaetze - 1) mal Durchlaufen. -> -1 da der Cursor durch das rs.next() in Zeile 1 bereits auf dem ersten Datensatz steht
    int i = 1;
                    
    while(i<columnCount+1){ // wird immer 4 mal pro Datensatz Durchlaufen - schadet nicht, ergibt jedoch auch keinen Sinn oder?
        row [0] = rs.getString("vorgangsnr");
        row [1] = rs.getString("DatumZeit");
        row [2] = rs.getString("kassdatum");
        row [3] = rs.getString("COUNT(*)");
        i++;
    } 

    rows.add(row);
}
```

Funktioniert das ganze denn nun mit den Änderungen?


----------



## Bluedaishi (21. Dez 2012)

nein der wird nicht 4 mal durch laufen der gibt die anzahl der zeilen wieder 
sieh mal weiter oben  columnCount = rsmd.getColumnCount();

den brauche ich um das array zu initialisieren 
um die arraylist in das array zu übergeben

damit dann die daten in einem JTable zusehen sind


----------



## Bluedaishi (21. Dez 2012)

sorry stimmt hast recht der wird viermal durchlaufen habe es jetzt rausgenommen aber ich bekomme immer noch das selbe ergbnis


----------



## Camill (21. Dez 2012)

Dann stimmt mit dem sql-Statement noch etwas nicht (sehe zumindest bei dem Auslesen keinen Fehler).


----------



## Bluedaishi (21. Dez 2012)

hmmm mensch das ne ....................  ich sitze da schon ein paar tage dran und bekomme es nicht in  werde mal versuchen ein screenshot zu machen


----------



## Bluedaishi (21. Dez 2012)

geht leider nicht :-(

es stehen nach wie vor 4 mal die selben werte im JTable


----------



## Bluedaishi (21. Dez 2012)

immer der letzte vorgang


----------



## Marcinek (21. Dez 2012)

Kannst du bitte lernen die Edit funktion zu nutzen?


---

Und deine Zeilen sind gleich, weil du immer das gleiche row element in die Liste packst.

Für jede Zeile muss da ein new String[] gemacht werden.


----------



## Bluedaishi (22. Dez 2012)

Gut werd es mir merken mit der EDIT Funktion 

und danke schön für deinen Tip jetzt klappt es .

frohe Weihnachten .....


----------

