ERLEDIGT
NEIN
NEIN
ANTWORTEN
21
21
ZUGRIFFE
882
882
EMPFEHLEN
-
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-Code:<?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:
Mir ist nicht ganz klar, nach welcher Spalte du ordnen möchtest?PHP-Code: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
Nach adte_status?
-
Liefert einen Datensatz zurück, welchen Sinn hätte da eine Sortierung?Code sql:
1
SELECT COUNT(*)
-
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
Code sql:1 2 3 4 5 6 7
SELECT ort, COUNT(*) AS anz FROM adressen GROUP BY ort
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
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.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
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.
-
Nunja, ich habe trotz lesen des Codes noch nicht erkannt was da eigentlich abgehen sollte

Wie jetzt. PHP hat zig Sortierungsmöglichkeiten für Arrays.
http://ch.php.net/manual/de/array.sorting.php
Wennn ich wüsste wie der Array aussehen sollte, dann könnte ich dir sagen welche Funktion dir da weiterhilft.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
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....
-
Ich kann mir gut vorstellen, dass es dafür eine Funktion geben könnte.
Ich versuch mal mein Vorhaben etwas genauer zu beschreiben.
Ich habe zwei Tabellen, eine mit Temindaten und eine mit Adressdaten eines Vereins.
in einer Verknüpfungstabelle hab ich zu jeder ID der Termine jede ID der Adressen sowie eine Spalte für den Status (1= Entschuldigt, 2= Anwesend, 3= unentschuldigt). So kann ich eine Anwesenheitskontrolle führen.
nun möchte ich anzeigen wer, wie oft anwesend war.
Jetzt frag ich, in der do-Schleife, mit SELECT COUNT(*) für jedes Mitglied die Anzahl der Datensätze ab wo 2 Steht.
Da ich zudem gerne eine kleine Rangliste erhalten möchte, hätte ich gerne jene Mirglieder mit der meisten präsenzzeit zu oberst und jene mit wenigsten zu unterst.
PHP-Code:<?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 = sprint
("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);
<?php
echo $row_absenzen_anw_anw['COUNT(*)'];
?>
</div></td>
} while ($row_mitglieder = mysql_fetch_assoc($mitglieder))
?>
Wenn die ID der Adressen mit dem Fremdschlüssel in der Verknüpfunktstabelle übereinstimmen, werden die Datensätze gezählt wo 2 in der Spalte adte_status steht.
das ergibt mir dann eine Auflisteung aller Namen und deren anzahl Anwesenheit.
-
Das machst du alles mit einer Abfrage und zwar in der die dir dieses Ergebnis liefert:
In der Abfrage Joins du einfach die Tabelle, gruppierst sie nach den Personen und zählst deren Fehltage und danach kannst du das Ergebnis auf- oder absteigend sortieren. Das machst du alles über SQl.PHP-Code:while ($row_mitglieder = mysql_fetch_assoc($mitglieder))
-
Genau das möchte ich.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.
Ich kenn mich gar nicht aus damit.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....
@Yaslaw: was meinst du mit:
¨
Wennn ich wüsste wie der Array aussehen sollte,
-
Naja, damit du nachher auch die Personen dem jeweiligen Wert zuweisen kannst, brauchst du entweder einen zweidimensionalen Array, oder du machst es z.B. über im-/explode...
Zweidimensionaler Array:
Ex-/Implodemethode:PHP-Code:$array[0] = array(name => "Hans", count => "17");
$array[1] = array(name => "Günther", count => "15");
$array[2] = array(name => "Markus", count => "13");
Persönlich würde ich die zweite Methode nehmen, ist zwar unschöner aber schlussendlich meiner Meinung nach simpler.PHP-Code:$array[0] = "Hans---17";
$array[1] = "Günther---15";
$array[2] = "Markus---13";
Wie man einen Array ordnet, kann ich dir beim besten Willen nicht sagen. Problematisch bei Version2 ist halt, dass da Namen drin sind. Die kann man wohl kaum ordnen...
-
Ok ich hab jetzt mal etwas betreffend Arrays gelesen.
Schreib ich dann mit einer Schleife in das Array?
Ich hab da mal etwas probiert, allerdings ohne grossen Erfolg.
PHP-Code:do {
$colname_absenzen_anw = "-1";
if (isset($row_mitglieder['ad_ID'])) {
$colname_absenzen_anw = $row_mitglieder['ad_ID'];
}
mysql_select_db($database_PopularisBischofszell, $PopularisBischofszell);
$query_absenzen_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, "int"));
$absenzen_anw = mysql_query($query_absenzen_anw, $PopularisBischofszell) or die(mysql_error());
$row_absenzen_anw = mysql_fetch_assoc($absenzen_anw);
$totalRows_absenzen_anw = mysql_num_rows($absenzen_anw);
$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);
$array[0] = array(nachname => $row_mitglieder['ad_nachname'], vorname => $row_mitglieder['ad_vorname'], count => $row_absenzen_anw['COUNT(*)'], unent => $row_absenzen_unent['COUNT(*)']);
} while ($row_mitglieder = mysql_fetch_assoc($mitglieder))?>
Ähnliche Themen
-
Select Feld innerhalb einer Schleife überprüfen
Von waswiewo im Forum PHPAntworten: 3Letzter Beitrag: 28.04.11, 11:49 -
Kategorien richtig ordnen
Von emptynick im Forum PHPAntworten: 3Letzter Beitrag: 25.08.07, 14:33 -
Limit bei SELECT COUNT() Ausgabe in einer Funktion
Von Obi_Wan im Forum PHPAntworten: 0Letzter Beitrag: 23.04.06, 11:34 -
Select count(*) VS. Select count(column_name)
Von Thomas Darimont im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 11.12.05, 15:19 -
SELECT Abfrage in einer WHILE Schleife?
Von Tom Joke im Forum PHPAntworten: 5Letzter Beitrag: 02.12.03, 16:49





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren