LIMIT-Anomalie

LIMIT-Anomalie

am 20.02.2006 17:26:18 von Stefan Schulze

Guten Tag,

ich habe ein Suchformular für eine MySQL-Tabelle erstellt.
Jedoch habe ich eine Anomalie festgestellt. Ich lasse mir Anzahl
der Datensätze zu einem Ausdruck MATCH() AGAINST() ausgegeben.

SELECT
COUNT(`nummer`)
FROM `table`
WHERE MATCH (`artikel`,`desc`)
AGAINST ('Eqwe*' IN BOOLEAN MODE)
GROUP BY `nummer`
ORDER BY `nummer` DESC;

Dabei habe ich eine auch eine Seitenanzeigenavigation eingebaut. Mit dem
URL-Parameter page lass ich das LIMIT beeiflußen,
damit pro Site nur 10 Datensätze ausgegeben werden.

Nun zu folgender MySQL-Abfrage:

SELECT
`nummer`
FROM `table`
WHERE MATCH (`artikel`,`desc`)
AGAINST ('Eqwe*' IN BOOLEAN MODE)
GROUP BY `nummer`
ORDER BY `nummer` DESC;

Ingesamt wurde 24 Datensätze gefunden.

Bei page=1 also LIMIT 0,10 =>10 Datensätze,
doch bei page=2 also LIMIT 10,20 => 14 Datensätze,
bei page=3, also LIMIT 20,30 => 4 Datensätze,

merkwürdig dabei entsprechen 4 der 14 Datesätze
von page=2 den 4 Datensätzen von page=3.

Ich habe die ganze Sache mit PHPmyAdmin mit
hagenau den gleichen SQL-Abfragen durchgeführt.
Das gleiche Ergebnis! Wo liegt der Fehler?
Ich möchte, dass nur 10 Datensätze angezeigt werden.

Re: LIMIT-Anomalie

am 20.02.2006 17:34:16 von Knut Kohl

Hallo Stefan,

Stefan Schulze schrieb am 20. Feb 2006 in de.comp.datenbanken.mysql:

[...]

> Bei page=1 also LIMIT 0,10 =>10 Datensätze,
> doch bei page=2 also LIMIT 10,20 => 14 Datensätze,
> bei page=3, also LIMIT 20,30 => 4 Datensätze,

> merkwürdig dabei entsprechen 4 der 14 Datesätze
> von page=2 den 4 Datensätzen von page=3.

Ist schon richtig, siehe
http://dev.mysql.com/doc/refman/4.1/en/select.html

> [LIMIT {[offset,] row_count | row_count OFFSET offset}]

page=1 also LIMIT 0,10 =>10 Datensätze,
offset=0, row_count=1

ABER

page=2 also LIMIT 10,20 => 14 Datensätze,
offset=10, row_count=20

Lösung:

... LIMIT {(page-1)*10}, 10

Knut


--

Newsoffice.de - Die Onlinesoftware zum Lesen und Schreiben im Usenet

Re: LIMIT-Anomalie

am 20.02.2006 17:41:35 von Felix Holdener

"Stefan Schulze" schrieb:

>Bei page=1 also LIMIT 0,10 =>10 Datensätze,
>doch bei page=2 also LIMIT 10,20 => 14 Datensätze,
>bei page=3, also LIMIT 20,30 => 4 Datensätze,
>
>merkwürdig dabei entsprechen 4 der 14 Datesätze
>von page=2 den 4 Datensätzen von page=3.
>
>Ich habe die ganze Sache mit PHPmyAdmin mit
>hagenau den gleichen SQL-Abfragen durchgeführt.
>Das gleiche Ergebnis! Wo liegt der Fehler?
>Ich möchte, dass nur 10 Datensätze angezeigt werden.

Limit hat die Parameter Offset, Zeilenzahl.
Also LIMIT 10,10 verwenden.

hth

Felix