Alle DAtenbankeinträge ausser den 1ten auflisten

Moderatoren: crack, Marwin, Krüsty

Beitragvon Rudi » Mittwoch 8. September 2004, 18:42

Grüss Gott alle miteinander.

Habe hier mal ein Script, welches alle Datenbankeinträge auflistet.
Das Script beinhaltet eine Blätterfunktion und funktioniert auch ganz gut.
Nun habe ich aber ein Problem damit.
Der erste Eintrag aus der Datenbank soll nicht angezeigt werden.
Leider bekomme ich das nicht hin!


Code: Alles auswählen
<?
include ("config.php");

$query = "SELECT * FROM `tabelle` ORDER BY `land` DESC";
$re = mysql_query($query);
$anz = mysql_num_rows($re);
?>

<?
$c=0;
while($anz >0){
   $c++;
   $anz = $anz - 10;
}
?>

<?
# Prüft ob die Variable $page schon vorhanden ist.
# ($page wird später durch die links angegeben)
# Sofern diese Variable noch nicht vorhanden sein sollte wird sie erstellt und auf 1 gesetzt.
if(!isset($page))
   $page = 1;

$pag = $page-1;

# Falls die momentan betrachtete Seite grösser als 1 ist,
# so werden die Links für "zurück" und "zur ersten Seite springen" erstellt.
if($page > 1 ){
   echo "<a href=\"auslesen.php?page=1\" target=\"_self\"><font color=\"#A7A7A7\">«</font></a> ";
   echo "<a href=\"auslesen.php?page=".$pag."\" target=\"_self\"><font color=\"#A7A7A7\">‹</font></a> ";
}

# Hier werden die Seiten als Direktlink ausgegeben.
for($b=1;$b<=$c;$b++){
   $site = $b;

   # Diese If-Abfrage ist nötig, um die Momentan betrachtete Seite nicht als Link anzugeben.
   if(isset($page) && $page == $site){
      # die Momentane Seite ohne Link:
      echo $b." ";
   }
   else
   {
      # Der auszugebende Link:
      echo "<a href=\"auslesen.php?page=$site\" target=\"_self\"><font color=\"#A7A7A7\">$b</font></a> ";
   }
}

# Falls die momentan betrachtete Seite kleiner als die Gesamt-Anzahl der Seiten ist,
# so werden die Links für "vor" und "zur letzten Seite springen" erstellt.
$pag = $page+1;
if($page < $c ){
   echo "<a href=\"auslesen.php?page=".$pag."\" target=\"_self\"><font color=\"#A7A7A7\">›</font></a> ";
   echo "<a href=\"auslesen.php?page=$c\" target=\"_self\"><font color=\"#A7A7A7\">»</font></a> ";
}
?>

<br>
<br>
<?
$array = array();
while($l=mysql_fetch_array($re)){
array_push($array,$l);
}
?>

<?
# Anzahl der Einträge holen:
$anzahl = mysql_num_rows($re);

# Nur die 10 Einträge anzeigen lassen, die die akutelle Seite ausgeben soll:
for($x=($anzahl-10*$page+10)-1; $x>($anzahl-10*$page)-1; $x--){
   # Nur ausgeben wenn $x grösser als 0 ist:
   if($x >= 0){
?>


Wenn ich in diesem String, an der mit Pfeilen gekennzeichneten Stelle.

Code: Alles auswählen
# Nur die 10 Einträge anzeigen lassen, die die akutelle Seite ausgeben soll:
for($x=($anzahl-10*$page+10>>-1<<)-1; $x>($anzahl-10*$page)-1; $x--){
   # Nur ausgeben wenn $x grösser als 0 ist:
   if($x >= 0){


Das Ergebnis wieder mit -1 minimiere.
Dann wird zwar der erste Eintrag nicht angezeigt. Aber auf jeder weiteren Seite,
fehlt dann auch jeweils ein Eintrag, der normalerweise angezeigt werden sollte.

Habe es auch schonmal so probiert.

Code: Alles auswählen
$query = "SELECT COUNT(*)- 1 as * FROM `tabelle` ORDER BY `land` DESC";


Dann gibts zwar keine Fehlermeldung. Aber die Einträge, werden auch nicht angezeigt.

Wie kann ich das nun realisieren, das es funktioniert?


Gruss Rudi
Rudi
Advanced Member
 
Beiträge: 30
Registriert: Donnerstag 24. Juli 2003, 17:05

Beitragvon Marwin » Donnerstag 9. September 2004, 21:36

Hallo Rudi,

am Sonntag wäre ein Jahr seit deinem letzten Beitrag bei uns vergangen ;) Was hast du denn bisher so schon alles gemacht?

Aber nun zu deinem Code:
vielleicht liegt es auch einfach an der Uhrzeit und meinem langen Tag, aber ich versteh entweder deinen Code oder dein Problem nicht. Oder sogar beides :lol: Ich bitte um Aufklärung.

Grüße, Marwin
Benutzeravatar
Marwin
Moderator
 
Beiträge: 307
Registriert: Donnerstag 8. Mai 2003, 21:19
Wohnort: Seelow, Deutschland

Beitragvon Rudi » Freitag 10. September 2004, 02:09

Hi Marwin.

Tja, gemacht habe ich eigendlich nicht so sehr viel.
Bis auf ein paar kleine Scripts, die ich hier und da mal benötigte.
Aber das war alles nicht´s berauschendes.

Nun zu meinem Script.


Das Obige Script, listet alle Einträge aus einer Datenbank-Tabelle auf und hat dabei eine Blätterfunktion.
Den Teil mit der Ausgabe der Daten in der Html Tabelle, habe ich mal weggelassen, weil nicht relevant!
Wie schonmal gesagt. Es funktioniert ja auch tadellos.
Nur habe ich in meiner Db.-Tabelle als ersten Eintrag jeweils die ID 0 vergeben.
Jetzt kannst Du mir zwar sagen, das man sowas nicht macht. Aber es ist für mich eine gute Möglichkeit, damit eine Stop Funktion zu steuern!
Aber genau diese erste Zeile mit der ID 0. Möchte ich in der Angezeigten Liste nicht mit ausgegeben haben!
Weil diese erste Zeile halt keine Informationen beinhalted, die für einen User interessant sein könnte.

Dieser Teil berechnet die Menge an Einträgen, die auf einer Seite ausgegeben werden sollen.

Code: Alles auswählen
# Nur die 10 Einträge anzeigen lassen, die die akutelle Seite ausgeben soll:
for($x=($anzahl-10*$page+10>>-1<<)-1; $x>($anzahl-10*$page)-1; $x--){
  # Nur ausgeben wenn $x grösser als 0 ist:
  if($x >= 0){


Und wenn ich in dem Bereich der Berechnung, der so gekennzeichnet ist]] [[( die Pfeile sind nur dafür da, damit man die -1 besser in dem String findet/sieht ! ) . Eine -1 dahinter eingebe und somit das Gesamtergebnis auf einer Seite wieder um -1 Eintrag reduziere. Wird zwar der erste Eintrag mit der ID 0 aus der Db.-Tabelle nicht mit angezeigt. Aber auf jeder weiteren Seite, die man durch die Blätterfunktion aufrufen kann. Fehlt auch jeweils ein Eintrag aus der Db. , der aber angezeigt werden sollte!
Haste das jetzt verstanden?
Es soll nur der Eintrag mit der ID 0 nicht angezeigt werden. Aber es werden pro Seite ein Eintrag unterschlagen!


Gruss Rudi
Rudi
Advanced Member
 
Beiträge: 30
Registriert: Donnerstag 24. Juli 2003, 17:05

Beitragvon Marwin » Freitag 10. September 2004, 16:55

Hallo Rudi,

Mhm, eine einfache Möglichkeit dies zu realisieren wäre, wenn du deine Daten beim MySQL-SELECT nach der ID sortierst, aufsteigend. Dann bräuchtest du bei der Ausgabe nur bei der zweiten Zeile des Abfrageergebnis anfangen und hättest danach keine weiteren Probleme. Die andere Möglichkeit ist, sich zuerst alle IDs zu holen (sortiert nach land) und danach durch diese Liste zu iterieren. Nebenbei zählst du einen Counter hoch, mit dem du ermittelst, wann du auf das erste Element der anzuzeigenden Seite triffst. Wenn du dann merkst, dass deine Counter-Variable gleich (SeitenNr-1)*(Anz. Elemente pro Seite)+1 ist, dann verläßt du die Schleife mit break. Danach holst du dir alle Daten die du aus der Datenbank benötigst mittels "SELECT id, land, ... ORDER BY land LIMIT ".($lCounter-1).", 11 DESC" und gehst diese Liste nach einander durch. Das Element, welches die ID 0 besitzt, wird nicht ausgegeben, aber alle anderen. Nebenbei ermittelst du wieder mit einem Counter, wieviele Elemente du bereits ausgegeben hast, so dass du die Schleife nach dem 10. abbrechen kannst. Und das war es dann auch schon.

Grüße, Marwin
Benutzeravatar
Marwin
Moderator
 
Beiträge: 307
Registriert: Donnerstag 8. Mai 2003, 21:19
Wohnort: Seelow, Deutschland

Beitragvon Rudi » Samstag 11. September 2004, 22:19

Hi Marwin,

danke Dir für die Hilfe!!!

Das Ergebnis kannste hier sehen.

http://cyberradio.cy.funpic.de/include.php...uche/inlist.php


Gruss Rudi
Rudi
Advanced Member
 
Beiträge: 30
Registriert: Donnerstag 24. Juli 2003, 17:05

Beitragvon Marwin » Samstag 11. September 2004, 23:53

;) Schön.

Marwin
Benutzeravatar
Marwin
Moderator
 
Beiträge: 307
Registriert: Donnerstag 8. Mai 2003, 21:19
Wohnort: Seelow, Deutschland


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron