• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

MySQL - Position eines Eintrags

jack-x

New member
Auf einer Seite lasse ich von einer Tabelle immer 20 Einträge anzeigen. Die Tabelle hat jetzt zum Beispiel 56 Einträge. Wenn ich jetzt einen neuen Eintrag anlege, wie kann ich herausfinden das der Eintrag auf der dritten Seite wäre. Also 56 Einträge vorher kämen?
 
OK, wohl etwas zu allgemein gehalten die Frage.

Zählen is klar, nee.

Alle Einträge einlesen und dann nach dem entsprechenden Eintrag suchen? Oder kann man das direkt über eine MySQL-Abfrage wie: zähle die Einträge, die vor diesem Eintrag kommen, bei dem oder dem WHERE, bzw. ORDER BY.
 
COUNT ist mir bekannt.

SELECT COUNT(*) FROM tabelle WHERE id=57 AND region='europa' ORDER BY reihenfolge.

Aber das würde ja nur zurückliefern, das ein Eintrag vorhanden ist COUNT(*)=1!

Aber wieviele kommen davor?
 
Naja, dann musst natürlich abfragen wieviele du davor hast.
PHP:
SELECT COUNT(*) FROM tabelle WHERE id<57 AND region='europa' ORDER BY reihenfolge.
 
Wenn es so einfach wäre.

Denn durch WHERE-Klauseln oder ORDER BY-Bedingungen kann es ja auch so aussehen:

Id
1
2
5
37
10
8
9

Nur die Id ist bekannt: wie kriege ich jetzt raus, wievile Einträge sind vor dem Eintrag mit der Id=10 vorhanden?
 
Code:
SELECT COUNT(*) FROM ... WHERE (ORDER_KRIT < (SELECT ORDER_KRIT FROM ... WHERE (id = 10)));
 
Code:
SELECT COUNT(*) FROM ... WHERE (ORDER_KRIT < (SELECT ORDER_KRIT FROM ... WHERE (id = 10)));

Etwas anderes Tabellen-Beispiel

HTML:
id  region    name
1   europa    aa
2   europa    ba
5   asien     bd
20  amerika   jj
10  amerika   aa
11  amerika   cc
20  europa    da

Gesamte Tabelle auslesen mit
HTML:
SELECT * FROM tabelle WHERE region='amrika' ORDER BY name

Würde dann die Postionsbestimmung mit dem ORDER_KRIT überhaupt funktionieren?
 
SELECT COUNT(*) FROM tabelle WHERE (publish < (SELECT publish FROM tabelle WHERE id=78) AND region="europ";

Liefert kein korrektes Ergebnis publish ist ENUM('y','n').

als Beispiel was sich dynamisch im Code daraus zusammen setzten kann.
Beim späteren Auslesen wäre das ORDER BY publish, tld, subtld, robot, popular, europe, record_period, price, price_reseller.
 
Das ORDER BY war nur ein Hinweis.

Hatte es zuerst auch so probiert:
SELECT COUNT(*) FROM tabelle WHERE (publish < (SELECT publish FROM tabelle WHERE id=68)) ORDER BY publish, tld, subtld, robot, popular, europe, record_period, price, price_reseller;

Dieser Eintrag wäre auf der ersten Seite in der zweiten Zeile.
Das obige Ergebnis liefert aber Zeile 136 von über 300.
 
Das ORDER BY war nur ein Hinweis.
schön, aber warum musst du nach zig spalten sortieren?

Hatte es zuerst auch so probiert:
SELECT COUNT(*) FROM tabelle WHERE (publish < (SELECT publish FROM tabelle WHERE id=68)) ORDER BY publish, tld, subtld, robot, popular, europe, record_period, price, price_reseller;
dann berücksichtigst du bei der position aber nur publish, sortierst aber nach publish, tld, subtld, robot, popular, europe, record_period, price, price_reseller.

Dieser Eintrag wäre auf der ersten Seite in der zweiten Zeile.
Das obige Ergebnis liefert aber Zeile 136 von über 300.
du musst die position dann auch abhängig von allen kriterien bestimmen. das ist bei der menge aber aufwendig.
 
im MySQL-Forum gabs trotz meines schrecklichen Englisch Hilfe:

HTML:
mysql_query( 'set @n = 0;', $mysql_ressource );
$mysql_select = 'SELECT sort - 1 cnt
                 FROM (SELECT @n := @n + 1 sort, id
                 FROM '.$mysql_table.$mysql_where.$mysql_order.') v
                 WHERE  id='.$id.';';

$ressource_id = mysql_query( $mysql_select, $mysql_ressource );
 
Zurück
Oben