# MYSQL Inhalt in Tabelle ausgeben



## Michael81 (30. Juni 2011)

*MYSQL Inhalt in Tabelle ausgeben. Problem bei der aufteilung/ verteilung*

Hallo,
ich habe folgendes Problem. Ich habe im meiner MYSQL Tabelle 57 Einträge. Diese möchte ich in einer Tabelle ausgeben. Bisher ist das ja kein Problem. Aber die Räume 1-28 sollen Links aufegführt werden, daneben Name und Buchnummer. Die Datensätze 29-57 sollen aber nicht darunter ausgegeben werden, sondern neben 1-28. Da ich das ganze nicht beschreiben kann, habe ich das als Bild angehangen, wie es ausshen soll.

Ich habe schon alles versucht. aber mir wird immer alles untereinander angezeigt oder nur fehler.





```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Bestand</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>

<?php

//includieren von datein
include 'lib/error.php';
include 'lib/connect.php';
include 'lib/kontrolle_eingabe.php';

//mysql daten abrufen
$anzeigen = mysql_query("SELECT * FROM bestand ORDER BY haftraum");


//tabelle generieren
echo "<table id='tabelle_ausgabe' border='1'>";
echo "<tr>";
echo "<th>Haftraum</th><th>Nachname</th><th>Vorname</th><th>Geburtsdatum</th><th>Buchnummer</th>";
echo "<th>Haftraum</th><th>Nachname</th><th>Vorname</th><th>Geburtsdatum</th><th>Buchnummer</th>";
echo "</tr>";

//datenabfrage und in tabelle füllen 
while($ausgabe = mysql_fetch_array($anzeigen)){
    echo "<tr>";
    echo "<td>".$ausgabe['haftraum']."</td>";
    echo "<td>".$ausgabe['nachname']."</td>";
    echo "<td>".$ausgabe['vorname']."</td>";
    echo "<td>".$ausgabe['gebdatum']."</td>";
    echo "<td>".$ausgabe['Buchnummer']."</td>";    
    echo "</tr>";
  }

echo "</table>";

?>
```


----------



## Alex_T (30. Juni 2011)

Moin,

also ich konnte nach schnellem Überfliegen gerade nur einen Fehler entdecken:

```
echo "<td>Haftraum</td><td>Nachname</td><th>Vorname</td><td>Geburtsdatum</td>
```
...da ist ein <th>-Tag anstelle eines <td>-Tags reingerutscht.
Vllt. löst es das Problem ja schon.


----------



## Michael81 (30. Juni 2011)

Ne, leider nicht. Ich habe das gestern nur vergessen zu ändern. Das war mal <th>.
Aus faulheit habe ich da "suchen und ersetzen" benutzt. ist aber jetzt geändert


----------



## Martin_N (30. Juni 2011)

Bei codes ist es Sinnvoll die entsprechenden Tags zu verwenden.
Bei php gibt es:
[.PHP][./PHP]
Du musst nur die Punkte entfernen und den code dazwischen posten.

Des weiteren wüsste ich gerne was genau Dein Problem ist? Gibt es eine Fehlermeldung, wenn ja welche?
Kopieren und hier posten.


grüße


----------



## Michael81 (30. Juni 2011)

Sorry, ich habe beim ändern des Quelltextes ausvershen alles überschrieben. Also auch meine Fragestellung und das [.PHP][./PHP].


----------



## Martin_N (30. Juni 2011)

In diesem Fall würde ich 2 Div Boxen verwenden und diese mittels dem CSS command "float: left;" nebeneinander setzen.
In diese setzt Du jeweils deine Abfragen.

```
<div class="haftraumbestand">
//tabelle generieren
echo "<table id='tabelle_ausgabe' border='1'>";
echo "<tr>";
echo "<th>Haftraum</th><th>Nachname</th><th>Vorname</th><th>Geburtsdatum</th><th>Buchnummer</th>";
echo "<th>Haftraum</th><th>Nachname</th><th>Vorname</th><th>Geburtsdatum</th><th>Buchnummer</th>";
echo "</tr>"; 

$getknast = mysql_query("SELECT * FROM bestand WHERE haftraum >= 0 ORDBER BY haftraum LIMIT 0, 28 ");
//datenabfrage und in tabelle füllen 
while($ausgabe = mysql_fetch_array($anzeigen)){
    echo "<tr>";
    echo "<td>".$ausgabe['haftraum']."</td>";
    echo "<td>".$ausgabe['nachname']."</td>";
    echo "<td>".$ausgabe['vorname']."</td>";
    echo "<td>".$ausgabe['gebdatum']."</td>";
    echo "<td>".$ausgabe['Buchnummer']."</td>";    
    echo "</tr>";
  } 

echo "</table>"; 
</div>
```


```
<div class="haftraumbestand">
//tabelle generieren
echo "<table id='tabelle_ausgabe' border='1'>";
echo "<tr>";
echo "<th>Haftraum</th><th>Nachname</th><th>Vorname</th><th>Geburtsdatum</th><th>Buchnummer</th>";
echo "<th>Haftraum</th><th>Nachname</th><th>Vorname</th><th>Geburtsdatum</th><th>Buchnummer</th>";
echo "</tr>"; 

$getknast = mysql_query("SELECT * FROM bestand WHERE haftraum >= 29 ORDBER BY haftraum ");
//datenabfrage und in tabelle füllen 
while($ausgabe = mysql_fetch_array($anzeigen)){
    echo "<tr>";
    echo "<td>".$ausgabe['haftraum']."</td>";
    echo "<td>".$ausgabe['nachname']."</td>";
    echo "<td>".$ausgabe['vorname']."</td>";
    echo "<td>".$ausgabe['gebdatum']."</td>";
    echo "<td>".$ausgabe['Buchnummer']."</td>";    
    echo "</tr>";
  } 

echo "</table>"; 
</div>
```

So müsste es funktionieren.


----------



## Kero (1. Juli 2011)

Noch ein kleiner Tip für ein effizienteres und übersichtlicheres Programmieren.

Findest Du es nicht mühsam, die ganze Tabelle und jede einzelne Zeile per echo auszugeben?

Sowas finde ICH persönlich übersichtlicher:


```
<?php while ($row = mysql_fetch_assoc($result) { ?>
Einträge ausgeben
<?php } ?>
```

Oder noch besser (wurde mir hier erst gerade kürzlich gezeigt und ist mein Favorit):


```
<?php while ($row = mysql_fetch_assoc($result): ?>
Einträge ausgeben.
<?php endwhile; ?>
```

Habe übrigens die Version meines Vorposters selbst ausprobiert und bei mir hat es problemlos funktioniert 

Viele Grüsse


----------



## Michael81 (1. Juli 2011)

Ich habe das jetzt umgesetzt. Nun habe ich das Problem, das die linke Tabelle richtig ausgefüllt wird. Aber die rechte bleibt immer leer. Ich habe die Variabelen, der rechten Tabelle mit ner 1 vershen. Also $ausgabe1, $anzeige1 usw. Damit die nicht doppelt vorkommen. Danach habe ich nach versucht nach der linken Tabelle php zu beenden und die rechtein einen eigenen Abschnitt zu setzen. Aber egal was ich mach, die rechte bleibt leer. Ich bekomm aber auch keine MySQL Fehler angezeigt. Weder mit mysql_errno, mysql:error und error_reporting E-All E-Notice.
momentan sieht es so aus:


```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Bestand</title>
<html>
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  </head>
<body>

<?php

//includieren von datein
include 'lib/error.php';
include 'lib/connect.php';


//tabelle links generieren
echo "<div class='haftraumbestand'>";
echo "<table style='float:left; margin-left:20px; margin-bottom:10px' border='1'>";
echo "<tr>";
echo "<th>Haftraum</th><th>Nachname</th><th>Vorname</th><th>Geburtsdatum</th><th>Buchnummer</th>";
echo "</tr>";

//datenabfrage und in tabelle füllen
$anzeigen = mysql_query("SELECT * FROM bestand WHERE haftraum >= 0 ORDER BY haftraum LIMIT 0, 28 ");
while($ausgabe = mysql_fetch_array($anzeigen)){
    echo "<tr>";
    echo "<td>".$ausgabe['haftraum']."</td>";
    echo "<td>".$ausgabe['nachname']."</td>";
    echo "<td>".$ausgabe['vorname']."</td>";
    echo "<td>".$ausgabe['gebdatum']."</td>";
    echo "<td>".$ausgabe['Buchnummer']."</td>";    
    echo "</tr>";
  }
echo "</table>";
echo "</div>";




//tabelle rechts generieren
echo "<div class='haftraumbestand'>";
echo "<table style='float:left; margin-left:1px; margin-bottom:10px' border='1'>";
echo "<tr>";
echo "<th>Haftraum</th><th>Nachname</th><th>Vorname</th><th>Geburtsdatum</th><th>Buchnummer</th>";
echo "</tr>"; 


//datenabfrage und in tabelle füllen 
$anzeigen = mysql_query("SELECT * FROM bestand WHERE haftraum >= 29 ORDER BY haftraum");
//$anzeigen = mysql_query("SELECT * FROM bestand WHERE haftraum >= 29 ORDER BY haftraum LIMIT 29, 53 ");
while($ausgabe = mysql_fetch_array($anzeigen)){
    echo "<tr>";
    echo "<td>".$ausgabe['haftraum']."</td>";
    echo "<td>".$ausgabe['nachname']."</td>";
    echo "<td>".$ausgabe['vorname']."</td>";
    echo "<td>".$ausgabe['gebdatum']."</td>";
    echo "<td>".$ausgabe['Buchnummer']."</td>";    
    echo "</tr>";
  } 
echo "</table>"; 
echo "</div>";

?>
```


Ach Kero, so ähnlich wie du es beschrieben hast, hatte ich es mal. aber auch da hatte ich das Problem mit den links rechts anordnen. an die Div box habe ich nie gedacht. Wäre ich auch nicht selber drauf gekommen.
Danke schonmal für den tip Martin


----------



## Michael81 (1. Juli 2011)

Ich habe es jetzt so unter kontrolle bekommen. Weiß zwar nicht ob es nicht nen schöneren weg gibt. Aber es ****t.

Bei der rechten Tabelle habe ich den Querry zu dieser Version geändert

```
$anzeigen1 = mysql_query("SELECT * FROM bestand WHERE haftraum <= 29 ORDER BY haftraum LIMIT 29, 53 ");
```


----------



## Alex_T (1. Juli 2011)

Das ist an sich schonmal gut,

allerdings hat dein "LIMIT" in der Query jetzt jeden Sinn verloren, denn du würdest ja mit deinem letzten Ergebnis beginnen und danach 53 weitere anschließen, obwohl du garnicht so viele Räume in der DB hast (vllt. doch, da spezielle Raumnummerierungen....).

Wenn man mal alles rein objektiv betrachtet, dann würde es doch eher Sinn machen, die linke Tabelle mit folgender Query zu generieren:


```
$anzeigen = mysql_query("SELECT * FROM bestand WHERE haftraum < 29 ORDER BY haftraum");
```

Dadurch spart man sich an dieser Stelle auch das Limit.

Für die rechte Tabelle würde damit folgender Ausdruck sinnvoll sein:


```
$anzeigen1 = mysql_query("SELECT * FROM bestand WHERE haftraum >= 29 ORDER BY haftraum LIMIT 28");
```

....und hinter das Limit schreibst du dann einfach nur die Anzahl der Datensätze, die du hier anzeigen lassen willst.
Wenn du natürlich versuchst, die Tabelle symmetrisch aufzubauen, dann kannst du dir die LIMITS komplett sparen und arbeitest mit dem Bedingungswert hinter WHERE.

Hoffe das konnte die Sache vllt. noch ein wenig vereinfachen.


----------



## Michael81 (3. Juli 2011)

Hi, ich werde dein Vorschlag, morgen mal umsetzen. Da es nie mehr wie 53 bzw. 53.4 Räume geben wird. 53.4 weil der Raum 53 mit max. 4 mann belegt werden kann. thx


----------

