Rolf B: Brauche Idee, für Titel Ausgabe bei einer SELECT abfrage, Ausgabe, gruppierte Var, dann Titel

Beitrag lesen

Hallo Matheu,

für den von mir dargestellten Ablauf brauchst du nicht zu zählen oder ein Ende zu errechnen. Das ist unnötige Mühe, die Gruppierung ergibt sich durch die Vorauslesetechnik ganz von allein. Der eine Satz, den Du vorausliest, erlaubt einen hinreichenden Blick in die Zukunft, um damit die notwendigen Entscheidungen treffen zu können.

Es sei denn, du willst VORHER ausgeben, wieviele Kategorien es geben wird. Davon war bisher nicht die Rede - und in dem Fall könnte man auch die HTML Ausgabe zwischenpuffern (Stichwort: ob_start + ob_get_flush) und währenddessen zählen, wieviele Kategorien kommen. Oder Du verwendest fetch_all, dann hast Du alle Rows im Speicher, und kannst sie einmal zum Zählen durchgehen (mit PHP dann, nicht mit SQL).

Ein SELECT COUNT(DISTINCT cat) (beachte DISTINCT) kann nur eine Zeile liefern, das hast Du ja so bestellt :) Eine Aggregierung und eine Detailabfrage in einem Zug geht nicht, dafür müsstest Du 2 Abfragen machen.

Falls Du dich fragst, wie du das mit dem <div> hinbekommen sollst - ich erweitere meinen Pseudocode mal. Woher Du $catUeberschrift bekommst, lasse ich offen - dafür weiß ich zu wenig vom Umfeld des Codes.

Das Beispiel geht davon aus, dass Du ein mysqli_result verwendest und die Ausgabevariablen nicht mit bind_result bindest.

Statt des echo-Befehls schalte ich zwischen PHP und HTML Modus um. In diesem Fall ist die alternative Syntax für Kontrollstrukturen besser lesbar, darum verwende ich die.

Deine Ausgabe sieht nach einer Tabelle aus, darum verwende ich mal <table>. Es mag semantisch falsch sein, aber dafür weiß man zu wenig.

$result = /* query ausführen und result ermitteln */
$row = /* Fetch auf erste Row */
?>
<table>
  <thead>
    <tr><th>cat</th><th>Titel</th></tr>
  </thead>
<?php
while ($row):
   $cat = $row['cat'];
   $catTitel = "whatever";
?>
  <tbody>
    <tr><th colspan="2">------- <?= $catTitel ?></th></tr>
<?php     
   while ($row && row['cat'] == $cat):
?>
    <tr><td><?= $row['id'] ?></td><td><?= $row['data'] ?></td></tr>
<?php
      $row = /* Fetch auf nächste Row */
   endwhile;
?>
  </tbody>
<?php
endwhile;
?>
</table>
<?php

Du sieht: Kein Schalter, kein Zähler, nur Struktur.

Rolf

--
sumpsi - posui - obstruxi