# Datensätze zählen.



## MiDniGG (5. Nov 2007)

Hi,

ich hab gesucht und nichts gefunden.

Deshalb meine Frage. Wie kann ich mit SQL die Datensätze zählen? Und ich meine nicht mit COUNT(*), da dazu eine Gruppierung notwendig ist.

Kurz. Ich brauch die Anzahl der Datensätze, dass ich mit einem BETWEEN o. ä. bestimmte Datensätze auslesen/anzeigen kann...

Ich hab es zwar schon anderst gelöst bekommen, möchte aber doch wissen, ob es möglich ist das mit SQL zu lösen.

Vielen Dank schon mal für die Hilfe 

Hier der funktionierende Code:


```
Class.forName( "org.hsqldb.jdbcDriver" );
Connection cn = DriverManager.getConnection( "jdbc:hsqldb:hsql://localhost:6745/webdb", "hsqlAdmin", "admin");
PreparedStatement ps = cn.prepareStatement("SELECT Name, eMail, Homepage, Text, Date FROM guestbook ORDER BY id DESC");
ResultSet rs = ps.executeQuery();
			
doc.add(new Phrase("Gästebucheinträge", new Font(BaseFont.createFont(BaseFont.COURIER_BOLD, BaseFont.CP1250, true), 20)));
			PdfPTable table = new PdfPTable(3);
			table.setWidths(new int[] {20, 40, 40});
			table.setWidthPercentage(100);
			table.setHorizontalAlignment(table.ALIGN_MIDDLE);
			
			for (int i = 0; i < pages; i++) {
				rs.next();
			}
			
			for (int i = 0; i < 10 && rs.next(); i++)
			{...
```

Und hier der SQL-Code der nicht will wie ich es gerne hätte:


```
SELECT Name, eMail, Homepage, Text, Date FROM guestbook WHERE COUNT(*) BETWEEN " + pages +" AND " + (pages + 10) + " ORDER BY id DESC
```

wundert euch nicht über die Titel, das ist nur eine kleine Übung


----------



## abollm (5. Nov 2007)

midnigg hat gesagt.:
			
		

> Hi,
> 
> ich hab gesucht und nichts gefunden.
> 
> ...



In SQL kannst du die Anzahl der Datensätze mit folgendem grundsätzlichem SELECT-Statement abfragen:

```
SELECT count(*) from deineTabelle t [where t.column1 ...];
```


----------



## Guest (6. Nov 2007)

Hm klingt schon mal gut. Danke 

Jedoch hab ich noch ein problem, da ich ja möchte, dass nur z.B. die Datensätze 10-20 ausgegeben werden.
Nach ID kann ich allerdings nicht sortieren, da ja auch wieder Datensätze gelöscht werden können...
Hat noch jemand eine Idee?

Oder geht das, dass ich dann einfach noch bei WHERE irgendwie COUNT(*) > 10 AND < 20 eingeb?

Gruß


----------



## SlaterB (6. Nov 2007)

häh, count(*) kanntest du doch schon (und hast darauf hingewiesen),

abollm wiederholt das bekannte Wissen, was schon merkwürdig genug ist,
aber dann sagts du auch noch 'Hm klingt schon mal gut. Danke'?
verrückt 


was du willst gibts im allgemeinen SQL nicht,
in Oracle gibts
SELECT x FROM yWHERE rownum between 12 and 15;

in MySQL gibts
SELECT x FROM y WHERE z limit 12,3;

(geklaut aus:
http://www.issociate.de/board/post/147275/rownum_equivalent_unter_MySQL?.html
)


----------



## The_S (6. Nov 2007)

In HSQL gibts LIMIT x OFFSET y .


----------



## abollm (6. Nov 2007)

SlaterB hat gesagt.:
			
		

> häh, count(*) kanntest du doch schon (und hast darauf hingewiesen),
> 
> abollm wiederholt das bekannte Wissen, was schon merkwürdig genug ist,
> aber dann sagts du auch noch 'Hm klingt schon mal gut. Danke'?
> ...



Wenn schon, dann:

```
SELECT count(x) FROM y WHERE rownum between 12 and 15;
```
 ;-)


----------



## MiDniGG (8. Nov 2007)

SlaterB hat gesagt.:
			
		

> häh, count(*) kanntest du doch schon (und hast darauf hingewiesen),
> 
> abollm wiederholt das bekannte Wissen, was schon merkwürdig genug ist,
> aber dann sagts du auch noch 'Hm klingt schon mal gut. Danke'?
> verrückt



Hehe. Jaah. Aber ich wusste nicht wie (in welcher reihenfolge) ich es schreiben sollte... Und da ich es so noch nicht ausprobiert hatte hab ich das halt mal geschrieben ^^

Naja. Habs etz so gelöst:


```
SELECT * FROM (SELECT id, Name, Email, Homepage, Date, Text FROM guestbook AS guestbook LIMIT " + (pages + 10) + " OFFSET " + (pages) + ") ORDER BY id
```

Wie Hobbit es geschrieben hat


----------

