SELECT COUNT(*) in einer do-Schleife richtig ordnen

Phips_CH

Mitglied
Hallo

ich möchte eine Zählerabfrage, in der ich die Anzahl eines bestimmten Wertes in einer Tabelle abfragen.

Diese geben ich dann in einer Schleife wieder aus. nun möchte ich aber die ausgabe so ordnen das zuerst die Ausgabe mit dem höchsten Wert ausgegeben wird und am Schluss der mit dem niedrigsten.

PHP:
<?php do { ?>             
              <tr>
                <td width="279" height="19"><?php echo $row_mitglieder['ad_nachname']; ?> <?php echo $row_mitglieder['ad_vorname']; ?></td>
                <td width="91" height="19"><div align="center">
                  <?php
				
$colname_absenzen_anw_anw = "-1";
if (isset($row_mitglieder['ad_ID'])) {
  $colname_absenzen_anw_anw = $row_mitglieder['ad_ID'];
}
mysql_select_db($database_PopularisBischofszell, $PopularisBischofszell);
$query_absenzen_anw_anw = sprintf("SELECT COUNT(*) FROM `pobi_adressen` as `t1` left JOIN `pobi_adrterm` as `t2` ON `t1`.`ad_ID` = `t2`.`adte_IDadr` WHERE (adte_status = 2) AND (adte_IDadr = %s) AND  ((ad_austritt = 0 and ad_aufgenommen <> 0) or (ad_probejahr <> 0 and ad_aufgenommen = 0 and ad_austritt = 0)) ORDER BY adte_status ASC", GetSQLValueString($colname_absenzen_anw_anw, "int"));
$absenzen_anw_anw = mysql_query($query_absenzen_anw_anw, $PopularisBischofszell) or die(mysql_error());
$row_absenzen_anw_anw = mysql_fetch_assoc($absenzen_anw_anw);
$totalRows_absenzen_anw_anw = mysql_num_rows($absenzen_anw_anw);

	echo $row_absenzen_anw_anw['COUNT(*)'];?> 
                </div></td>
<?php					
$colname_absenzen_unent = "-1";
if (isset($row_mitglieder['ad_ID'])) {
  $colname_absenzen_unent = $row_mitglieder['ad_ID'];
}
mysql_select_db($database_PopularisBischofszell, $PopularisBischofszell);
$query_absenzen_unent = sprintf("SELECT COUNT(*) FROM `pobi_adressen` as `t1` left JOIN `pobi_adrterm` as `t2` ON `t1`.`ad_ID` = `t2`.`adte_IDadr` WHERE (adte_status = 3) AND (adte_IDadr = %s) AND  ((ad_austritt = 0 and ad_aufgenommen <> 0) or (ad_probejahr <> 0 and ad_aufgenommen = 0 and ad_austritt = 0))", GetSQLValueString($colname_absenzen_unent, "int"));
$absenzen_unent = mysql_query($query_absenzen_unent, $PopularisBischofszell) or die(mysql_error());
$row_absenzen_unent = mysql_fetch_assoc($absenzen_unent);
$totalRows_absenzen_unent = mysql_num_rows($absenzen_unent);
?>
                            
        <td width="91"><div align="center">
<?php
 echo $row_absenzen_unent['COUNT(*)']; ?></div></td>
          </tr>
                <?php } while ($row_mitglieder = mysql_fetch_assoc($mitglieder))?>
      </table>


und zwar möchte ich die Schleife nach der Abfrage absenzen_anw_anw ordnen. bis jetzt allerdings ohne Erfolg

Gruss
Phips_CH
 
Das Problem und die Lösung sollte in der Abfrage liegen:

PHP:
SELECT COUNT(*) 
     FROM `pobi_adressen` AS `t1` 
     LEFT JOIN `pobi_adrterm` AS `t2` 
          ON `t1`.`ad_ID` = `t2`.`adte_IDadr` 
     WHERE (adte_status = 2) 
          AND (adte_IDadr = %s) 
          AND  ((ad_austritt = 0 AND ad_aufgenommen <> 0) 
                OR (ad_probejahr <> 0 AND ad_aufgenommen = 0 AND ad_austritt = 0)) 
     ORDER BY adte_status ASC

Mir ist nicht ganz klar, nach welcher Spalte du ordnen möchtest?
Nach adte_status?
 
SQL:
SELECT COUNT(*)
Liefert einen Datensatz zurück, welchen Sinn hätte da eine Sortierung?
 
Zuletzt bearbeitet von einem Moderator:
SELECT COUNT() FROM
Das ergibt genau eine Zeile mit einem Feld und einer Zahl. Der ORDER BY kannst du dir dabei sparen.

Wenn du die Anzahl pro etwas haben willst, dann musst du das Irgendwas in den SELECT Teil und in einen GROUP BY Teil setzen

SQL:
SELECT
    ort,
    COUNT(*) AS anz
FROM
    adressen
GROUP BY
    ort
 
Zuletzt bearbeitet von einem Moderator:
Das ich mit Count(*) "nur" eine Zahl erhalte, weiss ich.

Mit der left JOIN Abfrage zähle ich alle Datensätze in denen bei pobi_adrterm.ad_stauts eine 2 steht und zwar nur bei denen, wo in der Tabelle pobi_adressen die WHERE-bedingungen erfüllt sind.

Das ORDER BY in diesem Fall keine Funktion hat, leuchtet mir sehr wohl ein.

Diese gebe ich dann in der do-Schleife aus.

Diese Ausgabe, möchte ich der Grüsse nach ordnen.
 
Was willst du ordnen, wenn da nur eine Zahl ist?

145 absteigend geordnet ist 145. Und Aufsteigend sortiert ists immer noch nur die Zahl 145.
 
Da ich in einer Schleife eine Abfrage habe ergibt es für jeden Schleifen durlauf, die entsprechende Anzahl der Datensätze in der bei adte_status eine 2 steht.

das kann beim einten 15 sein oder 20 oder 12

nun möchte ich das zu oberst der höchste Wert steht und zu unterst die niedrigste.
 
Dir ist aber schon klar, dass das ein höchst komplizierter Vorgang ist?

Ich kann dir die Theorie erklären, umsetzen musst du es selber. ;)

Bei jedem Schleifendurchgang hängst du an einen Array die neue count-Zahl an.
Nach der Schleife lässt du dann den Array sortieren:

Ich lasse die Zahlen nun aufsteigend sortieren:
1) Vergleich von den ersten zwei Zahlen:
1.1) Zahl 1 ist größer: Zahl1 und Zahl2 tauschen Platz
1.2) Zahl 2 ist größer: Alles bleibt, wie es ist
2) Vergleich von den Zahlen 2 und 3
2.1) Zahl2 ist größer: Zahl2 und Zahl3 tauschen Platz
2.2) Zahl3 ist größer: Alles bleibt, wie es ist

Das machst du einfach oft genug, bis die Reihenfolge stimmt. Einfach mal ein wenig googlen zum Thema Programmierung und Sortierung.

€: Das PHP dafür eine Funktion hat, wäre mir nicht bekannt.
 
So wie ich das verstanden habe, lässt er eine Schleife laufen die entsprechend jeden Durchgang einen Count ausgibt, welchen er speichern (Array) möchte.
Den Array möchte er dann sortiert ausgeben.

PS: Ich kenn mich beim Sortieren halt nur in der Theorie aus, nicht in der Praxis. Gibt ja genug Algorithmen die zu einer Lösung führen....
 

Neue Beiträge

Zurück