tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
21
ZUGRIFFE
882
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Phips_CH Phips_CH ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    45
    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
     

  2. #2
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    Das Problem und die Lösung sollte in der Abfrage liegen:

    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 AND ad_aufgenommen <> 0
                    OR (
    ad_probejahr <> AND ad_aufgenommen AND ad_austritt 0)) 
         
    ORDER BY adte_status ASC 
    Mir ist nicht ganz klar, nach welcher Spalte du ordnen möchtest?
    Nach adte_status?
     

  3. #3
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    Code sql:
    1
    
    SELECT COUNT(*)
    Liefert einen Datensatz zurück, welchen Sinn hätte da eine Sortierung?
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  5. #5
    Phips_CH Phips_CH ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    45
    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.
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  7. #7
    Phips_CH Phips_CH ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    45
    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.
     

  8. #8
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    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.
     

  9. #9
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Nunja, ich habe trotz lesen des Codes noch nicht erkannt was da eigentlich abgehen sollte

    Zitat Zitat von Lime Beitrag anzeigen
    €: Das PHP dafür eine Funktion hat, wäre mir nicht bekannt.
    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

  10. #10
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    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....
     

  11. #11
    Phips_CH Phips_CH ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    45
    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.
     

  12. #12
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    Das machst du alles mit einer Abfrage und zwar in der die dir dieses Ergebnis liefert:
    PHP-Code:
     while ($row_mitglieder mysql_fetch_assoc($mitglieder)) 
    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.
     

  13. #13
    Phips_CH Phips_CH ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    45
    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.
    Genau das möchte ich.

    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 kenn mich gar nicht aus damit.

    @Yaslaw: was meinst du mit:
    ¨
    Wennn ich wüsste wie der Array aussehen sollte,
     

  14. #14
    Avatar von Lime
    Lime Lime ist gerade online frisch fruchtig
    Registriert seit
    Jul 2011
    Beiträge
    373
    Zitat Zitat von Phips_CH Beitrag anzeigen
    @Yaslaw: was meinst du mit [...]
    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:
    PHP-Code:
    $array[0] = array(name => "Hans"count => "17");
    $array[1] = array(name => "Günther"count => "15");
    $array[2] = array(name => "Markus"count => "13"); 
    Ex-/Implodemethode:
    PHP-Code:
    $array[0] = "Hans---17";
    $array[1] = "Günther---15";
    $array[2] = "Markus---13"
    Persönlich würde ich die zweite Methode nehmen, ist zwar unschöner aber schlussendlich meiner Meinung nach simpler.
    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...
     

  15. #15
    Phips_CH Phips_CH ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    45
    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

  1. Antworten: 3
    Letzter Beitrag: 28.04.11, 11:49
  2. Kategorien richtig ordnen
    Von emptynick im Forum PHP
    Antworten: 3
    Letzter Beitrag: 25.08.07, 14:33
  3. Antworten: 0
    Letzter Beitrag: 23.04.06, 11:34
  4. Select count(*) VS. Select count(column_name)
    Von Thomas Darimont im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 11.12.05, 15:19
  5. SELECT Abfrage in einer WHILE Schleife?
    Von Tom Joke im Forum PHP
    Antworten: 5
    Letzter Beitrag: 02.12.03, 16:49