PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenbank Auslese splitten.


Kuka
17.03.2002, 16:25
Habe folgendes Problem:

Ich habe eine Datei die aus einer Datenbank Datensätze ausliest. Nur bei 100 Datensätzen, die noh ständig mehr werden, läd mir die Datei schon zu lang :( .

Ich möchte es so haben das die PHP-Datei nur 25 Einträge anzeigt und dann so wie auf Boards z.B unten dann automatisch generiert dieses "1 2 3" wo dann halt auf 1 Eintrag 1-25 auf 2 Eintrag 25-50 und auf 3 50-75 etc. anzeigt. Ich weiß aber nichtmal wie ich da ansetzen soll :mauer: :/

Würde mich freuen wenn ihr mir helfen könnte :)

mfg kuka


sami
17.03.2002, 17:23
am besten liest du erst mal die anzahl datensätze aus.
$result_count = mysql_query("SELECT COUNT(irgendEineSpalte) FROM tabelle");
daraus kannst dann rechnen, wie viele links du anzeigen musst.
du kannst $result_count direkt verwenden, also ohne fetch_array oder so.

in die eigentliche abfrage tust dann LIMIT $von, $bis rein, wobei $von und $bis zuvor errechnet werden müssen.
$result_bla = mysql_query("SELECT spalte1, spalte2, ... FROM tabelle LIMIT $von, $bis");

Kuka
17.03.2002, 17:32
Soweit war ich schon :D Nur wie bekomme ich das hin das der unten automatisch "1 2 3.." generiert?
Schonmal thx :)

sami
17.03.2002, 17:42
for ($i = 1; $i < (($result_count / 25) + 1); $i++)
echo &quot;<a href=\&quot;$PHP_SELF?seite=$i\&quot;>$i</a> &quot;;

Kuka
17.03.2002, 18:01
Original von sami
... wobei $von und $bis zuvor errechnet werden müssen...

Wie meinst du das genau bzw wie soll man das machen?

Ich glaube daran haperts bei mir.. es wird nämlich nur eine &quot;1&quot; angezeigt..

thx für das bis jetzt :]

sami
17.03.2002, 18:16
also wenn du den code von mir oben benutzt, um die links zu generieren hast ja dann den parameter $seite
daraus kannst du $von und $bis berechnen.
z.b.
$seite == 1: $von = 1; $bis = 25;
$seite == 2: $von = 26; $bis = 50;

also ist
$von = ((($seite - 1) * 25) + 1);
$bis = ($seite * 25);
damit beim 1. aufruf, wenn $seite ned definiert ist, das auch stimmt, tust oben an dem ganzen noch folgendes rein:
if (!isset($seite))
$seite = 1;

Kuka
17.03.2002, 18:31
Ich hab jetzt


if (!isset($seite))
$seite = 1;
$von = ((($seite - 1) * 10) + 1);
$bis = ($seite * 10);
$res = mysql_db_query(&quot;$dbname&quot;,&quot;select * from ddl_no2&quot;);
$num = mysql_num_rows($res);
$result_count = mysql_query(&quot;SELECT COUNT(id) FROM ddl_no2&quot;);
$result_bla = mysql_query(&quot;SELECT * FROM ddl_no2 LIMIT $von, $bis&quot;);
$query = mysql_query($result_bla);
while($$result_bla = mysql_fetch_array($query))


aber es will ned so recht klappen ;/

sami
17.03.2002, 20:24
jo wenn du kein db_select hast, musst halt überall mysql_db_query machen.
ausserdem sind doch die zeilen da für nix:
$res = mysql_db_query(&quot;$dbname&quot;,&quot;select * from ddl_no2&quot;);
$num = mysql_num_rows($res);

sag doch gleich am anfang, dass du weder von mysql noch von php was verstehst *fg* :D ;)

Kuka
17.03.2002, 20:38
Original von sami
jo wenn du kein db_select hast, musst halt überall mysql_db_query machen.

..hö? :rolleyes:

Original von sami
ausserdem sind doch die zeilen da für nix:
$res = mysql_db_query(&quot;$dbname&quot;,&quot;select * from ddl_no2&quot;);
$num = mysql_num_rows($res);

Das benutze ich um die Anzahl der einträge in der db anzuzeigen.

Original von sami
sag doch gleich am anfang, dass du weder von mysql noch von php was verstehst *fg* :D ;)

Ich dachte das wäre schnell klar.. :D

sami
17.03.2002, 21:25
Original von sami
jo wenn du kein db_select hast, musst halt überall mysql_db_query machen.
ersetz jeweils
mysql_query( durch mysql_db_query(&quot;$dbname&quot;, das wollt ich sagen.

Original von Kuka
Das benutze ich um die Anzahl der einträge in der db anzuzeigen.
dafür hast du:$result_count = mysql_query(&quot;SELECT COUNT(irgendEineSpalte) FROM tabelle&quot;);
ist einiges effizienter.

Kuka
17.03.2002, 21:35
if (!isset($seite))
$seite = 1;
$von = ((($seite - 1) * 10) + 1);
$bis = ($seite * 10);
$result_count = mysql_db_query(&quot;$dbname&quot;,&quot;SELECT COUNT(id) FROM ddl_no2&quot;);
$result_bla = mysql_db_query(&quot;$dbname&quot;,&quot;SELECT * FROM ddl_no2 LIMIT $von, $bis&quot;);
$query = mysql_db_query(&quot;$dbname&quot;,&quot;$result_bla&quot;);
while($result = mysql_fetch_array($query))



Es wird nichts ausgelesen..
Einträge werden nicht richtig gezählt..
&quot;1 2 3 etc..&quot; geht immer noch nicht..


;(

sami
17.03.2002, 22:37
Original von Kuka

$query = mysql_db_query(&quot;$dbname&quot;,&quot;$result_bla&quot;);


wasn das!?

also die einzelnen php bzw. sql befehle musst schon selbst nachguggen, ich hab dir nur gesagt, wie es so generell möglich wär.

cYrus
18.03.2002, 07:38
die Lösung findest du unter www.selfphp.info ;)

so long
cYrus

Bauchi
18.03.2002, 07:48
hi,

also ..

if (!isset($seite))
$seite=1

meinst du das funktioniert ?
da fehlen die brackets drumrum:

if (!$seite) {
$seite=1
}

dann passt die if clause erstmal ...

ich weiss nicht, ob du das hier:
$result_count = mysql_db_query(&quot;$dbname&quot;,&quot;SELECT COUNT(id) FROM ddl_no2&quot;);

noch irgendwo verwendest, aber in diesem kontext bringts nix, weil du nichts mehr mit der variable anfängst ... und die backslashes bitte ignorieren .. die macht das board hier immer rein .. ;(

mysql_db_query ist seit versin 4.1.0 deprecated.. man sollte mysql_query benutzen, da db_query demnächst wohl über board fallen wird ...

und das beste nachschlagewerk ist imho www.php.net/manual :))

sami
18.03.2002, 11:01
Original von Bauchi
if (!isset($seite))
$seite=1

meinst du das funktioniert ?
da fehlen die brackets drumrum:

wenn nur eine (1) anweisung folgt nach ner bedingung oder ner schlaufenanweisung, darf man sich die brackets sparen.
Original von Bauchi
ich weiss nicht, ob du das hier:
$result_count = mysql_db_query(&quot;$dbname&quot;,&quot;SELECT COUNT(id) FROM ddl_no2&quot;);

noch irgendwo verwendest, aber in diesem kontext bringts nix, weil du nichts mehr mit der variable anfängst ...

doch, das wird später verwendet, um die links zu generieren - er hat ned den ganzen code gepostet.
es ersetzt $res = mysql_db_query(&quot;$dbname&quot;,&quot;select * from ddl_no2&quot;);
$num = mysql_num_rows($res);
und ist effizienter, weil nicht alle daten vom sql in webserver übertragen werden müssen.
Original von Bauchi
mysql_db_query ist seit versin 4.1.0 deprecated.. man sollte mysql_query benutzen, da db_query demnächst wohl über board fallen wird ...

da stimm ich dir zu, ich habs ja in meinem vorschlag auch ned verwendet, aber war halt zu faul, ihm das zu erklären :]

Kuka
19.03.2002, 17:12
...sorry wenn ich euch so viel mühe bereite.. ist das erstemal das ichn bissel mit php rumbastel..


Bis jetzt habe ich immer so ausgelesen:

$sqlst = &quot;select * from ddl_no2 order by date desc&quot;;
$query = mysql_query($sqlst);
while($result = mysql_fetch_array($query))



Dadurch kam
$query = mysql_db_query(&quot;$dbname&quot;,&quot;$result_bla&quot;);
zustande..

Ich wollte nur das alte mit dem was ich hier bekommen hatte

($result_count = mysql_query(&quot;SELECT COUNT(id) FROM ddl_no2&quot;);
$result_bla = mysql_query(&quot;SELECT * FROM ddl_no2 LIMIT $von, $bis&quot;);)
verbinden.. aber das bekomme ich nicht hin und dadurch wird nix mehr angezeigt ;(

Kuka
24.03.2002, 19:53
Also ich hab jetzt maln bissel in tutorials gelesen und glaube jetzt zu verstehen wie ihr das meint..

Habe aber noch 2 Probleme:


Es wird nur die 1ste Seite mit Hyperlink kreiert. Von Seite 2,3 etc. keine Spur ;/
Wenn ich Manuell Seite 2 aufrufe o. 3 werden immer unterschiedlich viele Datensätze ausgelesen.