Seite 1 von 1

Darstellung in Spalten

Verfasst: Di 14.Nov, 2006 14:13
von Holger
Moin,

ich möchte aus einer Datenbankabfrage ein Vergleichsskript basteln.
Das Ergebnis soll in Spalten nebeneinander gezeigt werden.
In Reihen wäre das alles kein Problem, ich möchte aber SPALTEN.

Mein Anzeige-Skript:

Code: Alles auswählen

<?php
  // Ansluter till Mysql. Måste alltid finnas i alla php-filer
  // som använder Mysql. Kom ihåg att byta ut användarnamn och
  // lösenord.
  mysql_connect("*", "**", "***");

  // Här väljer vi vilken databas vi ska använda.

  mysql_select_db("****");

$result = mysql_query("SELECT tillverkare, maskinbeteckning, maskintyp, produktion, antal, vikt, laengd, bredd, hoejd, raeckvidd, skopvolym, motor, motoreffekt, kommentar
FROM maskinlista ORDER BY registrerat DESC");

?>
<table cellspacing="5">
<tr><td>Tillverkare:</td>
<?php
  while ($r = mysql_fetch_array($result))
  {
    echo('<td>');
    echo($r['tillverkare']);
    echo('</td>');
  }
?>
</tr>
<tr><td>Maskinbeteckning:</td>
<?php
$result = mysql_query("SELECT tillverkare, maskinbeteckning, maskintyp, produktion, antal, vikt, laengd, bredd, hoejd, raeckvidd, skopvolym, motor, motoreffekt, kommentar
FROM maskinlista ORDER BY registrerat DESC");
  while ($r = mysql_fetch_array($result))
  {
    echo('<td>');
    echo($r['maskinbeteckning']);
    echo('</td>');
  }
?>
</tr>
</tr>
<tr><td>Maskintyp:</td>
<?php
$result = mysql_query("SELECT tillverkare, maskinbeteckning, maskintyp, produktion, antal, vikt, laengd, bredd, hoejd, raeckvidd, skopvolym, motor, motoreffekt, kommentar
FROM maskinlista ORDER BY registrerat DESC");
  while ($r = mysql_fetch_array($result))
  {
    echo('<td>');
    echo($r['maskintyp']);
    echo('</td>');
  }
?>
</tr>
</table>
Ich WEISS, dass ich in diesem Fall

Code: Alles auswählen

$result = mysql_query("SELECT
auf das nötigste kürzen soll.
ABER: ist das wirklich die einzige Art so eine Anzeige zu basteln? Kann doch nicht sein!

Es soll solange durchgerollt werden, bis
tillverkare, maskinbeteckning, maskintyp, produktion, antal, vikt, laengd, bredd, hoejd, raeckvidd, skopvolym, motor, motoreffekt, kommentar
alle einmal dran waren ...

Hat jemand bessere Ideen?

/Holger

Verfasst: Di 14.Nov, 2006 15:35
von oxpus
Öh, kannst Du Dein Vorhaben mal mit einer einfachen Liste anhand von "Inhalten" und nicht von Feldern aufführen?

Denn wenn ich es richtig verstanden habe, soll nicht ein Dateisatz in einer Zeile, sondern je Dateisatz nur ein Feld in einer Zeile stehen.
Also der Datensatz nicht nach rechts, sondern nach unten aufgeführt werden.
Richtig?

Verfasst: Di 14.Nov, 2006 15:43
von Holger
[quote="oxpus";p="66425"]Denn wenn ich es richtig verstanden habe, soll nicht ein Dateisatz in einer Zeile, sondern je Dateisatz nur ein Feld in einer Zeile stehen.
Also der Datensatz nicht nach rechts, sondern nach unten aufgeführt werden.
Richtig?[/quote]
Japp!

Das Ergebnis:
http://www.gremminger.se/service/compare/visa.php

Verfasst: Di 14.Nov, 2006 15:47
von oxpus
... nach deiner oben genannten Methode?

Verfasst: Di 14.Nov, 2006 15:47
von Holger
Ja ...
Aber ich habe DESC in ASC geändert ...

Verfasst: Di 14.Nov, 2006 18:24
von oxpus
Naja, ist eigentlich einfach:

Alle Daten erst einmal einlesen und dann sortiert wieder ausgeben.
Dazu werden 2 verschachtelte Schleifen verwendet, die einmal die Felder und dann die Inhalte der einzelnen Datensätze herausfummelt.
Wie in der Anlage eben dargestellt (ungetestet).

Wenn Du Felder weglassen oder in der Reihenfolge ändern willst, dann einfach das Array "$titles" bearbeiten.
Diese Titel stellen dazu die Feldnamen in der Tabelle dar und werden zum Abfragen komplett in Kleinbuchstaben umgewandelt.
Wenn Du also andere Namen in der Darstellung verwenden willst, müsstest Du hierzu ein Alias in der Abfrage erstellen.
Also z. B.:

Code: Alles auswählen

$result = mysql_query("SELECT * FROM maskinlista ORDER BY registrerat ASC");
wird dann zu

Code: Alles auswählen

$result = mysql_query("SELECT *, tillverkare AS beschreibung FROM maskinlista ORDER BY registrerat ASC");
wobei "Beschreibung" dann der Alias ist, der in dem Array "$titles" wieder verwendet und damit angezeigt werden kann.

Denk aber dran, nur kleingeschriebene Namen in der Abfrage zu verwenden!

Verfasst: Mi 15.Nov, 2006 08:49
von Holger
Hmm, habe mal das Script hochgeladen und getestet.
Output meine Version:
http://www.gremminger.se/service/compare/visa.php
Output Deine Version:
http://www.gremminger.se/service/compare/script.php

Da kommt nichts raus ...

EDIT: mein Fehler! Alles ok!
"registrerat" hatte ich geändert in "maskinbeteckning"
DANKE!
Ich werde vermutlich mehr Fragen hierzu haben, ich will nämlich eine Auswahl ermöglichen:
http://www.gremminger.se/service/compare/start.php

EDIT2: doch nicht richtig!
Du hast die $title verwendet für die Datenbankabfrage UND für die Reihentitel.
In der Datenbank ist "Hoejd" bzw "hoejd" zwar richtig, aber die Zeile hat den Titel "Höjd".
Böse Falle, gelle?!?!

Verfasst: Mi 15.Nov, 2006 10:47
von oxpus
Ich schrieb bereits: "ungetestet".
Konnte ich ja auch nicht, da ich die Tabelle nicht hatte ;)

Aber gut wenn es in deiner nun neuen Version klappt...

Verfasst: Mi 15.Nov, 2006 10:57
von Holger
Danke!

Verfasst: Do 03.Mai, 2007 11:33
von Holger
Hi, ich habe nun das Script im Einsatz:
http://www.maskinisten.net/compare/visa.php
Ich habe ganz vorne ja eine Beschreibung ("Tillverkare", "Maskinbeteckning" usw).
Diese Beschreibung würde ich alle fünf oder 10 Spalten anzeigen.

Geht das?

Gruss
Holger

Code: Alles auswählen

<table cellspacing="5">
<tr><td class="tdborder">Tillverkare</td>
<?php

$vergleich = (isset($HTTP_POST_VARS['vergleich'])) ? $HTTP_POST_VARS['vergleich'] : array(); 
$sql_where_ids = ''; 
if(sizeof($vergleich)) 
{ 
for ($i=0; $i<sizeof($vergleich); $i++) 
{ 
$sql_where_ids .= ($sql_where_ids != '') ? ', ' . $vergleich[$i] : $vergleich[$i]; 
} 
} 


if ($sql_where_ids) 
{ 
$sql_where_ids = ' WHERE id IN (' . $sql_where_ids . ') ';
}

$result = mysql_query("SELECT * FROM maskinlista $sql_where_ids ORDER BY id ASC");
  while ($r = mysql_fetch_array($result))
  {
    echo('<td class="tdborder"><b>');
    echo($r['tillverkare']);
    echo('</b></td>');
  }
?>
</tr>
<tr><td class="tdborder">Maskinbeteckning</td>
<?php
$vergleich = (isset($HTTP_POST_VARS['vergleich'])) ? $HTTP_POST_VARS['vergleich'] : array(); 
$sql_where_ids = ''; 
if(sizeof($vergleich)) 
{ 
for ($i=0; $i<sizeof($vergleich); $i++) 
{ 
$sql_where_ids .= ($sql_where_ids != '') ? ', ' . $vergleich[$i] : $vergleich[$i]; 
} 
} 


if ($sql_where_ids) 
{ 
$sql_where_ids = ' WHERE id IN (' . $sql_where_ids . ') ';
}
$result = mysql_query("SELECT * FROM maskinlista $sql_where_ids ORDER BY id ASC");
  while ($r = mysql_fetch_array($result))
  {
    echo('<td class="tdborder"><b>');
    echo($r['maskinbeteckning']);
    echo('</b></td>');
  }
?>
</tr>
usw

Verfasst: Do 03.Mai, 2007 12:56
von oxpus
Ja, wenn Du die Tabelle in der Form aufbereitest, wie ich Dir das schon einmal genannt hatte.
Aktuell erstellst Du Zeile für Zeile mit einer Abfrage ...

Verfasst: Do 03.Mai, 2007 13:01
von Holger
Arrrg, ich wusste, mit der Seite war noch was zu tun. Sorry.