Mehrspaltige Ausgabe, Sortierung nach Alphabet untereinander

Caralynn

Mitglied
Hallo,

nachdem ich jetzt das halbe Forum durchsucht habe und auch teilweise Antwort gefunden habe, brauche ich jetzt einen kräftigen Denkanstoß :eek:

Ich habe eine bestimmte Anzahl von Datensätzen in der Datenbank und möchte diese nach dem Alphabet geordnet in drei Tabellenspalten ausgeben lassen. Klappt soweit auch sehr schön - allerdings sind die Datensätze nicht untereinander nach dem Alphabet angeordnet, sondern nebeneinander nach dem Alphabet angeordnet...

Hier ist mein Codeschnipsel:
PHP:
$abfrage = mysql_query("SELECT id, nickname FROM members ORDER BY nickname");
echo "<table width='100%'><tr>"; 
for($i=1;$row=mysql_fetch_array($abfrage);$i++) 
{ 
echo "<td><a href=\"viewuser.php?m=".$row["id"]."\">".$row["nickname"]."</a></td>\n"; 
 if ($i % 3 == 0) { echo "</tr><tr>"; } 
} 
 echo "</tr></table>";

Die Ausgabe sieht in etwa so aus:

Code:
|1|2|3|
|4|5|6|
|7|

Und so sollte sie aussehen:

Code:
|1|4|7|
|2|5|
|3|6|

Hat jemand eine Idee?


Liebe Grüße,
Cara
 
Hallo,
etwa etwas in dieser Form ?

HTML:
<table border=1><tr><td>

<table border=1><tr><td>1</td></tr><tr><td>2</td></tr><tr><td>3</td></tr></table>

</td><td>

<table border=1><tr><td>4</td></tr><tr><td>5</td></tr><tr><td>6</td></tr></table>

</td><td>

<table border=1><tr><td>7</td></tr><tr><td>8</td></tr><tr><td>9</td></tr></table>

</td></tr></table>
MfG Tabuk
 
@Tabuk:

Joa, kommt hin - das ist aber nicht das Problem, sondern die Umsetzung in PHP, dass es am Ende so im HTML ausgegeben wird.


LG,
Cara
 
Habe das jetzt nicht getestet.
Aber so mein Ansatz.
Habe aber noch unten eine kleine Denkblockade in der IF Bedingung.
(Sorry, aber ist schon spät.)


PHP:
abfrage = mysql_query("SELECT id, nickname FROM members ORDER BY nickname");
echo "<table width='100%'><tr><td>";

for($i=1;$row=mysql_fetch_array($abfrage);$i++) 
{
if (($i==1) OR ($i % 3 == 0)) {echo "<table>"; }
echo "<tr><td><a href=\"viewuser.php?m=".$row["id"]."\">".$row["nickname"]."</a></td></tr>"; 

if (($i % 3 == 0) AND ( ? ) { echo "</table></td><td>"; } 
else { echo "</table>";}
}

echo "</td></tr></table>";
 
Ich nochmal...

Habe jetzt längere Zeit daran herumprobiert und es immer noch nicht geschafft, meine Versuche, den Code oben zu ergänzen, waren auch nicht gerade von Erfolg gekrönt :(


Habe es aber leider immer noch in der Form (und ich bin froh, dass ich es wenigstens wieder so weit habe):


1|2|3
4|5|6
7|8|9

:(
Denke eben, dass die Gesamtanzahl eine Rolle spielt... nur wie einbauen

Lg,
Cara
 
Naja, die Gesamtanzahl der gelieferten Datensätze bekommst du ja über mysql_num_rows($resource) raus...

Die Anzahl geteilt durch Spaltenanzahl (3) bzw. deren aufgerundetes Ergebnis sagt dir, wieviele Datensätze in einer Spalte sein sollen. Dann musst du bei der Ausgabe noch per Modulus prüfen, ob du eine neue Spalte beginnen sollst oder nicht.

PHP:
$anzahlDaten = mysql_num_rows($abfrage);
$anzahlSpalten = 3;
$spaltenlaenge = ceil($anzahlDaten/$anzahlSpalten);

$i=0; // Zählvariable

while($datensatz = mysql_fetch_assoc($abfrage)) {
  // Hier die Bedingungen (Modulus) für die Ausgabe
  $i++; //Zähler +1
}

Sorry, dass ich das erstmal nicht komplett aus dem Kopf schreiben kann, denn ich muss jetzt weg!

EDIT:
PHP:
$anzahlDaten = mysql_num_rows($abfrage);
$anzahlSpalten = 3;
$spaltenlaenge = (int)ceil($anzahlDaten/$anzahlSpalten);

$i=1; // Zählvariable

echo "<table><tr>\n";

while($datensatz = mysql_fetch_assoc($abfrage)*/) {
  
	// Hier die Bedingungen (Modulus) für die Ausgabe
	// Neue Spalte (Zelle der äußeren Tabelle)
	if(($i==1) or (($i-1)%$spaltenlaenge==0)) {
	  echo "<td><table>\n";
	}
	
	//Ausgabe der DB-Inhalte
	echo "<tr><td>".$datensatz['id']."</td></tr>\n";
	
	//Zelle der äußeren Tabelle schließen
	if($i%$spaltenlaenge==0) {
	  echo "</table></td>\n";
	}
  $i++; //Zähler +1
}  

echo "</tr></table>\n";
 
Zuletzt bearbeitet:
Wozu Tabellen? Nimm lieber gruppierende div-Elemente und formatiere sie Anschließend:
PHP:
<?php

	$itemsPerGroup = 3;
	$i = 0;
	while( $i < 8 ) {
		if( $i % $itemsPerGroup == 0 ) {
			echo '<div class="group">';
		}
		echo '<p>foobar '.$i.'</p>';
		if( $i % $itemsPerGroup == $itemsPerGroup-1 ) {
			echo '</div>';
		}
	}

?>
Code:
.group {
	float:	left;
	padding: 0 1%;
	width:	30%;
	border-right:	solid;
}
 
Zurück