Zur Navigation

sql Abfrage mit Kopfzeile

1 webuser

Hallo,
ich habe eine sql Abfrage und will die aber so darstellen, das immer der Gruppenkopf oben steht:

Gruppe1
daten
daten
daten
Gruppe2
daten
daten
...

Jetzt steht immer Vorne der Name der Gruppe und dann der Text dahiner.
(record[11] ist die Gruppe)

<?php
    //Verbindung zur Datenbank herstellen
  mysql_connect("localhost", "xxx","xxx") or die ("Verbindung nicht möglich");
  mysql_select_db("xxxx") or die ("Datenbank existiert nicht");

    //Alle Kundendaten selektieren
    $result = mysql_query("SELECT tl_linkslist_link.*, tl_linkslist_list.name as gruppe FROM tl_linkslist_list INNER JOIN tl_linkslist_link ON tl_linkslist_list.ID = tl_linkslist_link.pid");

$num_fields = mysql_num_fields($result);
$num_rows = mysql_num_rows($result);
$row_cnt = 0;


while ($num_rows>$row_cnt)
{
  $record = @mysql_fetch_row($result);
  echo  $record[11]."<A HREF=\"".$record[4]."\" target=\"_blank\"><b>".$record[9]."</b></A><br>"."\n";
        $row_cnt++;
}

mysql_close();
?>
Gruß
Webuser

29.06.2014 19:20

2 Jörg Kruse

Was ist der "Gruppenkopf" - ein Datenfeld? wenn ja, welches - $record[11]?

Oder willst du die Zahl hinter "Gruppe" einfach nur hochzählen (1, 2, ..)?

Für letzteres könntest du ja $row_cnt verwenden:

echo 'Gruppe' . ($row_cnt + 1) . '<br>' . "\n";

29.06.2014 19:58

3 webuser

Hallo,
ja im "Gruppenkopf" sollen die Daten aus $record[11] gezeigt werden.

(hier steht dann z.b. Firma, Sonstige...)
Hochzähen will ich nicht.

Gruß
Webuser

29.06.2014 20:08

4 Jörg Kruse

Dann geht es dir nur um eine andere Darstellung?

Du kannst $record[11] ja in ein <h2> oder <h3> einbauen, und die übrigen Daten in ein <p>

  echo '<h3>' . $record[11] . '</h3>' . "\n";
  echo '<p><a href="' . $record[4] . '" target="_blank"><b>' . $record[9] . '</b></a></p>' . "\n";

29.06.2014 21:04 | geändert: 29.06.2014 21:05

5 webuser

Hallo,
ja nur reine Darstellung.
Ich habe schon was gefunden. Aber der Kopf wird immer wieder wiederholt.

    $result = mysql_query("SELECT tl_linkslist_link.*, tl_linkslist_list.name FROM tl_linkslist_list INNER JOIN tl_linkslist_link ON tl_linkslist_list.ID = tl_linkslist_link.pid");

$num_fields = mysql_num_fields($result);
$num_rows = mysql_num_rows($result);
$row_cnt = 0;
$currentGroup = '';

while ($num_rows>$row_cnt)
{

  $record = @mysql_fetch_row($result);


 if ($currentGroup != $record[11]) ;
 { echo "<h4>".$record[11]."</h4>";
$currentGroup = $record[11];

 }

  echo  "<A HREF=\"".$record[4]."\" target=\"_blank\"><b>".$record[9]."</b></A><br>"."\n";
        $row_cnt++;
}

mysql_close();
?>
Wie am Anfang geschrieben, soll der Gruppenkopf z.B.
--------------------------
Firma
Datensatz
Datensatz
Datensatz
--------------------------
Sontiges
Datensatz
Datensatz
.....

gezeigt werden.

Gruß
Webuser

29.06.2014 21:21

6 Jörg Kruse

Aber der Kopf wird immer wieder wiederholt.

Ja, soll er doch auch? Beim ersten Durchlauf heißt er "Firma", beim zweiten "Sontiges"?

Ich versteh das Problem noch nicht so ganz.

Oder geht es um mehrere Datenbankabfragen mit jeweils einem Datenkopf? In deinem Code sehe ich ja nur eine Abfrage.

29.06.2014 21:29

7 webuser

Hallo,
ich habe eine Abfrage die aus einer Linkliste die Daten rauszieht.
Jeder Link ist in einer Gruppe eingetragen.
Die Gruppe heißt zB. "Urlaub" oder "Firmen"
Die stehen sauber untereinander.
Es sollen jetzt alle Daten untereinander stehen:

Urlaub
--an der Nordsee
--an der Ostsee
--zu Hause
Firmen
--Fa. Müller
--Fa. Meier

Jetzt wird gezeigt:
Urlaub
an der Nordsee
Urlaub
an der Ostsee
Urlaub
zu Hause
Firmen
Fa. Müller
Firmen
Fa. Meier

Entschuldige die das Mißverständnis.

Gruß
Webuser

30.06.2014 17:09

8 Jörg Kruse

$record[11] entspricht dem "tl_linkslist_list.name as gruppe"?

Zuerst solltest du mit einem ORDER BY Statement sicherstellen, dass die Ergebnisse auch gruppiert sind und "Urlaub", "Firma" etc. sich nicht einander abwechseln.

Dann könntest du folgendermaßen verfahren:

$result = mysql_query("
    SELECT tl_linkslist_link.*, tl_linkslist_list.name as gruppe 
    FROM tl_linkslist_list 
    INNER JOIN tl_linkslist_link 
    ON tl_linkslist_list.ID = tl_linkslist_link.pid
    ORDER BY gruppe
");

$previous_group = '';
while ($record = mysql_fetch_row($result)) {
    if ($previous_group != $record[11]) {
        echo '<h3>' . $record[11] . '</h3>' . "\n";
        $previous_group = $record[11];
    }
    echo '<p><a href="' . $record[4] . '" target="_blank"><b>' . $record[9] . '</b></a></p>' . "\n";
}

mysql_num_rows() und einen Zähler benötigst du übrigens nicht, mysql_fetch_row() beendet von alleine die Schleife, sobald alle Datensätze ausgegeben wurden

EDIT

Ich seh grad, sowas ähnliches hattest du selbst auch schon in Beitrag 5 versucht:

 if ($currentGroup != $record[11]) ;
 { echo "<h4>".$record[11]."</h4>";
$currentGroup = $record[11];

 }

Das fehlerhafte ";" hat wohl dein if Konstrukt versemmelt

30.06.2014 17:34 | geändert: 30.06.2014 17:35

9 webuser

Hallo Jörg,
danke, für deine Unsterstützung.
...man oh man dieses kleine Semikolon.

Gruß
Webuser

30.06.2014 23:18

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]