MySQL Abfrage Problem :-)

Bluedaishi

Bekanntes Mitglied
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


SQL:
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:;(;(;(
 
hier noch das ganze Statement 🙂

Java:
	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);
			
				}
 
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?
 
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
 
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
 
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 🙂
 
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.
Java:
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);
}
 
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 🙂 ??
 
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.
 
Verbesserungsvorschlag hatte ich oben gepostet, hier auch nochmal eine kleine Erklärung zu deiner while-Schleife:
Java:
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?
 
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
 
hmmm mensch das ne .................... 🙂 ich sitze da schon ein paar tage dran und bekomme es nicht in 🙂 werde mal versuchen ein screenshot zu machen 🙂
 
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.
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben