Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
mysql mit spalten [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
mysql mit spalten


 
usany
26-08-2003, 10:38 
 
ich hoffe ihr könnt mir bei folgenden problem mithelfen.

Ich möchte eine mysql abfrage mach wo die erste hälfte aller datensätze in einer tabelle in der linken spalte angezeigt werden und die zweite hälfte der datensätze in der rechten spalte einer tabelle...

kann mir da jemand weiterhelfen?

 
mrhappiness
26-08-2003, 10:45 
 
mysql: alles einlesen

php:
- ein array mit allen einträgen machen
- array halbieren
- in tabelle ausgeben
  - eintrag 1 von array 1
  - eintrag 1 von array 2
  - eintrag 2 von array 1
  - eintrag 2 von array 2
  - ...


realisierung:
manual und forum als suchhilfe benutzen *g*

 
wahsaga
26-08-2003, 10:47 
 
frage mit mysql_num-rows() ab, wie viele datensätze dein ergebnis enthält, und reagiere entsprechend ...

(tipp: <table><tr><td> kommt vor der ausgabeschleife.
in der schleife lässt du einen zähler mitlaufen, sobald der die hälfte der datensatzanzahl überschreitet, wird </td><td> ausgegeben, um eine neue tabellenzelle zu machen.
anschliessend per </td></tr></table> alles wieder schön zu machen ...)

 
kapitaeniglo
26-08-2003, 10:52 
 
@wahsage :

ich weiss net ob mysql_num_rows() so ne gute idee ist, da ich gehoert hatte, das es um eineiges langsamer ist als nen count() in mysql direkt ...

gruss
iglo

 
usany
26-08-2003, 10:55 
 
also habs mit count() gemacht, aber ich blick nicht ganz wie man das ganze auf 2 spalten verteilt... das ist eher das problem

 
Titus
26-08-2003, 10:57 
 
Es gibt prinzipiell zwei Methoden
1. unter Benutzung von mysql_data_seek (http://www.php-resource.de/manual.php?p=function.mysql-data-seek) - belastet den DB-Server etwas mehr und braucht mehr Zeit (wegen der Funktionsaufrufe)
2. mit Zwischenspeichern - braucht ein wenig mehr RAM, ist aber schneller

In beiden Fällen natürlich erstmal die Query abschicken:
$sqlres = mysql_query("...") or die(mysql_error());

dann mit mysql_data_seek (Ergebnis-Zeiger verschieben):$anzahl = mysql_num_rows($sqlres);
// Hälfte plus 1 = erster Datensatz rechts:
$haelfte = ceil($anzahl / 2);
for ($i=0; $i<$haelfte; $i++)
{
mysql_data_seek($sqlres, $i);
$links = mysql_fetch_assoc($sqlres);
mysql_data_seek($sqlres, $haelfte+$i);
$rechts = mysql_fetch_assoc($sqlres);
// und hier die Ergebnisse ausgeben:
...
}mit Zwischenspeichern (und "springen" im Array):$ergebnisse = array();
while($row = mysql_fetch_assoc($sqlres))
$ergebnisse[] = $row;
$haelfte = ceil(count($ergebnisse)/2);
for ($i=0; $i<$haelfte; $i++)
{
$links = $ergebnisse[$i];
$rechts = $ergebnisse[$haelfte+$i];
// und hier die Ergebnisse ausgeben:
...
}

 
usany
26-08-2003, 11:22 
 
Original geschrieben von Titus
Es gibt prinzipiell zwei Methoden
1. unter Benutzung von mysql_data_seek (http://www.php-resource.de/manual.php?p=function.mysql-data-seek) - belastet den DB-Server etwas mehr und braucht mehr Zeit (wegen der Funktionsaufrufe)
2. mit Zwischenspeichern - braucht ein wenig mehr RAM, ist aber schneller

In beiden Fällen natürlich erstmal die Query abschicken:
$sqlres = mysql_query("...") or die(mysql_error());

dann mit mysql_data_seek (Ergebnis-Zeiger verschieben):$anzahl = mysql_num_rows($sqlres);
// Hälfte plus 1 = erster Datensatz rechts:
$haelfte = ceil($anzahl / 2);
for ($i=0; $i<$haelfte; $i++)
{
mysql_data_seek($sqlres, $i);
$links = mysql_fetch_assoc($sqlres);
mysql_data_seek($sqlres, $haelfte+$i);
$rechts = mysql_fetch_assoc($sqlres);
// und hier die Ergebnisse ausgeben:
...
}mit Zwischenspeichern (und "springen" im Array):$ergebnisse = array();
while($row = mysql_fetch_assoc($sqlres))
$ergebnisse[] = $row;
$haelfte = ceil(count($ergebnisse)/2);
for ($i=0; $i<$haelfte; $i++)
{
$links = $ergebnisse[$i];
$rechts = $ergebnisse[$haelfte+$i];
// und hier die Ergebnisse ausgeben:
...
}

ok Danke, hat wunderbar funktioniert.

 
wahsaga
26-08-2003, 13:10 
 
Original geschrieben von usany
ok Danke, hat wunderbar funktioniert.
überlege bitte beim nächsten mal, ob wirklich ein fullquote nötig ist, um uns das mitzuteilen.

 
usany
28-08-2003, 15:30 
 
ok mein code sieht momentan folgendermassen aus:


<?php
include ("einstellungen.php");
dbconnect();
?>
<table width="100%">
<?php
$sql = "SELECT * FROM links_kategorie ORDER BY name ASC;";
$get = mysql_query($sql);
$ergebnisse = array();
while($row = mysql_fetch_assoc($get))
$ergebnisse[] = $row;
$haelfte = ceil(count($ergebnisse)/2);
for ($i=0; $i<$haelfte; $i++)
{
$links = $ergebnisse[$i];
$rechts = $ergebnisse[$haelfte+$i];

?>
<tr>
<td width="50%"><?php echo $links['name']; ?></td>
<td width="50%"><?php echo $rechts['name']; ?></td>
<?php
}
?>
</tr>
</table>


Da es sich um eine Linkliste handelt, habe ich Kategorien und Unterkategorien. Im Code oben werden die Kategorien angezeigt. Nun möchte ich, dass jeweils unter den Kategorien ($links['name'] & $rechts['name'] die unterkategorien anzeigt. Kann mir jemand weiterhelfen?

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:34 Uhr.