ERLEDIGT
NEIN
NEIN
ANTWORTEN
21
21
ZUGRIFFE
882
882
EMPFEHLEN
-
Ist zwar keine Antwort weil:
Willst du dein Code nicht formatieren?item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen
Auch SQLs sind Formatiert lesbar. In deiner Form leider nicht.
Zudem, alles was in der do{} drin ist, kann man auch einrücken um zu sehen von wo bis wo die Schleife gehtPHP-Code://Vergleich mal deins
$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"));
//versus das
$query_absenzen_anw = <<<SQL
SELECT
COUNT(*)
FROM
pobi_adressen as t1
LEFT JOIN pobi_adrterm AS t2
ON t1.ad_ID = t2.adte_IDadr
WHERE
t2.adte_status = 2
AND t2.adte_IDadr = %s
AND (
(t1.ad_austritt = 0
AND t1.ad_aufgenommen <> 0)
OR
(t1.ad_probejahr <> 0
AND t1.ad_aufgenommen = 0
AND t1.ad_austritt = 0)
)
ORDER BY
adte_status ASC
SQL;
$query_absenzen_anw = sprintf($query_absenzen_anw, GetSQLValueString($colname_absenzen_anw, "int"));
---------------------------------------------------------------------------------------------------
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
-
Hallo Yaslaw
Ich kann dich gut verstehen wenn du nicht erfreut bist über unformatierte Codes.
Mann verzeihe mir,
Ich werde mich bemühen, künftig meine Codes anschaulicher darzustellen.
Vielleicht hilfst du mir trotzdem weiter bei meinem Problem.
Wie schreib ich aus einer Abfrage mehrere Ergebnisse in ein Array und das in einer Schleife?
Freundliche Grüsse
Phips_CH
-
Sorry, ich versteh leider immer noch nicht was du genau was du haben willst, was bei deinen Arrays nicht funktioniert (Fehlermeldungen? Falsche Resultate? Wenn ja, welche?), was ein Array
item: $totalRows_absenzen_anw = mysql_num_rows($absenzen_anw);
$totalRows_absenzen_anw ist logischerweise immer 1, da ein SELECT COUNT(*) FROM immer genau eine Zeile ausgibt.
Also kannst du dir diese Verwirrung sparen
item: Wenn du in den Count-SQL ein Feld-Alias setzt, kannst du nachher eleganter drauf zugreifen
Dann kannst du so drauf zugreiffenCode sql:1 2 3 4 5
SELECT COUNT(*) AS cnt_adr FROM pobi_adressen ...
item: Die SQLS lassen sich wahrscheinlich verknüpfen. Hab aber grad keine Lust alles zu formatieren, zu analysieren, zu verstehen und umzubauen.PHP-Code:echo $row_absenzen_anw['cnt_adr'];
item: in der folgenden Zeile setzt du dein Array zusammen.
$array[0] = array(nachname => $row_mitglieder['ad_nachname'], vorname => $row_mitglieder['ad_vorname'], count => $row_absenzen_anw['COUNT(*)'], unent => $row_absenzen_unent['COUNT(*)']);
Du schreibst aber immer alles in den Index 0 von $array. Somit überschreibst du bei jedem Durchgang durch die Schleife den Eintrag auf Index 0. Wenn du ein 2-Dimensionalen Array haben willst, dann lass die Nummer weg damit jedes mal ein euer Eintrag in den Array geschrieben wird
PHP-Code://Array initialzieren
$array = array();
do{
...
//Hier keinen Index angeben
$array[] = 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))?>
---------------------------------------------------------------------------------------------------
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 wenn ich das richtig sehe gibt es 2 entscheidende Tabellen mit folgenden Feldern (oder so ungefähr):
pobi_adrterm
adte_IDmitglied
adte_IDadr
adte_status
pobi_mitglieder
ad_id
ad_nachname
ad_vorname
Mit folgender Abfrage kann man die gewünschte Ergebnismenge erhalten, ohne diese Zwischenabfragen in der do-while Schleife und das mit den Arrays ist auch völlig überflüssig.
Code sql:1 2 3 4 5 6 7 8
SELECT `m`.`ad_vorname` AS `Vorname`,`m`.`ad_nachname` AS `Nachname`, SUM(IF(`t`.`adte_status`=1,1,0)) AS `Entschuldigt`, SUM(IF(`t`.`adte_status`=2,1,0)) AS `Anwesend`, SUM(IF(`t`.`adte_status`=3,1,0)) AS `unentschuldigt` FROM `pobi_mitglieder` AS `m` LEFT JOIN `pobi_adrterm` AS `t` ON `m`.`ad_id`=`t`.`adte_IDmitglied` GROUP BY `adte_IDmitglied` ORDER BY `Anwesend` DESC
Die Ausgabe sieht dann ungefähr so aus:
Code :1 2 3 4 5 6 7
+---------+----------+--------------+----------+----------------+ | Vorname | Nachname | Entschuldigt | Anwesend | unentschuldigt | +---------+----------+--------------+----------+----------------+ | Bar1 | Foo1 | 0 | 2 | 1 | | Bar3 | Foo3 | 0 | 1 | 0 | | Bar2 | Foo2 | 0 | 0 | 0 | +---------+----------+--------------+----------+----------------+
Mit den richtigen Tabellen könnte man das Statement richtig formulieren ...
-
Ich habe zwei Tabellen.
zum einen die Tabelle
pobi_adressenmit den Feldern
ad_ID
ad_Nachname
ad_vorname
ad_austritt
ad_aufgenommen
ad_probejahr
zum andern die Tabelle
pobi_adrterm die aus der Feldern
adte_ID
adte_IDadr
adte_IDter
adte_status
Die Tabelle pobi_adrterm ist eine Verknüpfungstabelle. in adte_IDadr steht der Wert von pobi_adressen.ad_ID drin. In adte_IDter steh die ID einer weiteren Tabelle, wo ich alle Termine und Anlässe speichere.
mit:
frag ich ab, ob ein Mitglied noch im Ferien ist. Denn ich möchte nur diese Anzeigen.PHP-Code: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))
Nun möchte ich für jedes Mitglied die Anzahl der Datensätze, aus der Tabelle pobi_adrterm wo bei adte_status eine 2 steht.
Die Ausgabe würde (sollte) dann so aussehen. hinter jedem Vor-/Nachname steht dann wie oft er Anwesend war (bei adte_status eine 2 steht) und zur Info wie oft er Unentschuldigt fern blieb (bei adte_status eine 3 steht).
In der Tabelle sollte dann das Mitglied, welches am meisten Anwesend war, zuoberst stehen.
Wie kann ich die Ergebnisse dann Ausgeben?
-
Also, so kriegst du die adress-Ids inkl. Zähler sortiert nach Anzahl
Und das ganez mit den Adressdaten verknüpft:Code sql:1 2 3 4 5 6 7 8 9 10 11
SELECT adte_IDadr, COUNT(*) AS cnt FROM pobi_adrterm WHERE adte_status = 2 GROUP BY adte_IDadr ORDER BY COUNT(*) DESC
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
SELECT adte_IDadr, ad_Nachname, ad_vorname, COUNT(*) AS cnt FROM pobi_adrterm INNER JOIN pobi_adressen ON adte_ID = ad_ID WHERE adte_status = 2 GROUP BY adte_IDadr, ad_Nachname, ad_vorname ORDER BY COUNT(*) DESC
Das kannst du so einmal auslesen und ganz normale als Tabelle mit PHP ausgeben---------------------------------------------------------------------------------------------------
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
-
Vielen Herzlichen Dank.
Hat wunderbar funktioniert.
Ohne eure Hilfe hätte ich das nie herausgefunden.
INNER Join musste ich etwas anders Lösen, damit es mir die Namen angezeigt hat.
Wenn ich jetzt nun aus der dritten Tabelle pobi_termine, dessen ID in der Spalte adte_IDter der Verknüpfungstabelle pobi_adrtermsteht, auch in Join einbeziehen?PHP-Code:FROM `pobi_adrterm` as `t1` inner JOIN `pobi_adressen` as `t2` ON `t1`.`adte_IDadr` = `t2`.`ad_ID`
Denn das Datum für den Termin steht in der Tabelle pobi_termine ich möchte aber nur die Anzahl Datensätze zurück für einen bestimmten Zeitraum. (Saison, Jahr, etc.)
Ä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