ilch Forum » Allgemein » HTML, PHP, SQL,... » Schleife in Schleife

Geschlossen
  1. #1
    User Pic
    SteKu Mitglied
    Registriert seit
    25.03.2007
    Beiträge
    259
    Beitragswertungen
    2 Beitragspunkte
    Hallo

    folgende problem ich lese aus einer schleife etwas aus und möcht mit einer ausgabe aus dieser schleife ein 2. schleife in der schleife füttern. geht irgendwie nicht.

    <?php
    $erg = mysql_query ("SELECT count, date, anz FROM sc_statistik WHERE (sid = ".$zeile['id']." AND h = 'inf') ORDER BY date DESC LIMIT ".$anzahlShownTage);
    while ($row = mysql_fetch_row($erg) ) {
    
    ...
    
    $ergh = mysql_query ("SELECT count, date as datum, anz, h FROM sc_statistik WHERE (sid = ".$zeile['id']." AND date = ".$row['date']." AND al = '1')");
    while ($rowh = mysql_fetch_row($ergh) ) {
    
    ...
    
    }
    }
    ?>

    allerdings bekomme ich beider 2. schleife keine ausgabe, nehme ich das "date = ".$row['date']."" raus aus der WEHRE, funktioniert es zeigt aber "zuviel" an.
    Wer Rechtschreibfehler findet darf sie behalten.
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Rock@wulf Hall Of Fame
    Registriert seit
    03.06.2004
    Beiträge
    3.282
    Beitragswertungen
    239 Beitragspunkte
    Uff sieht reichlich kompliziert aus was soll das denn machen?
    Meine Postings repräsentieren meine Meinung wenn nicht anders gekennzeichnet.
    MFG Rock@wulf
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    she Mitglied
    Registriert seit
    13.11.2010
    Beiträge
    1.115
    Beitragswertungen
    82 Beitragspunkte
    <?php
    $erg = mysql_query ("SELECT count, ´date´, anz FROM sc_statistik WHERE (sid = ".$zeile['id']." AND h = 'inf') ORDER BY date DESC LIMIT ".$anzahlShownTage);
    while ($row = mysql_fetch_row($erg) ) {
     
    ...
     
    $ergh = mysql_query ("SELECT count, ´date´ as datum, anz, h FROM sc_statistik WHERE (sid = ".$zeile['id']." AND ´date´ = ".$row['date']." AND al = '1')");
    while ($rowh = mysql_fetch_row($ergh) ) {
     
    ...
     
    }
    }
    ?>

    Meistens liegt es daran das das date als mysql funktion erkannt wird.
    Google+ shelfinger.eu
    Das Wissen verfolgt mich - doch ich bin schneller!
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Rock@wulf Hall Of Fame
    Registriert seit
    03.06.2004
    Beiträge
    3.282
    Beitragswertungen
    239 Beitragspunkte
    Jup da hat er recht das hab ich gletweg übersehen weil ich immer alles in ```packe O_o
    Meine Postings repräsentieren meine Meinung wenn nicht anders gekennzeichnet.
    MFG Rock@wulf
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    SteKu Mitglied
    Registriert seit
    25.03.2007
    Beiträge
    259
    Beitragswertungen
    2 Beitragspunkte
    nun ja also das date ist uninteresant, den wenn ich statt

    AND date = ".$row['date']."

    das direkt abfrage
    AND date = '2012-06-18'

    funktioniert es. allerdings eben immer nur für das eine datum
    aber es soll ja für jedes datum ausgelesen werden

    ach man ich verzweifel bald
    Wer Rechtschreibfehler findet darf sie behalten.
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Rock@wulf Hall Of Fame
    Registriert seit
    03.06.2004
    Beiträge
    3.282
    Beitragswertungen
    239 Beitragspunkte
    versuche es mal so

    AND date = `".$row['date']."`
    Meine Postings repräsentieren meine Meinung wenn nicht anders gekennzeichnet.
    MFG Rock@wulf
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    SteKu Mitglied
    Registriert seit
    25.03.2007
    Beiträge
    259
    Beitragswertungen
    2 Beitragspunkte
    ich glaube irgendwie soll das nicht funktionieren

    denn so siehts mommentan aus:
    <?php
    $erg = mysql_query ("SELECT count, ´date´, anz FROM sc_statistik WHERE (sid = ".$zeile['id']." AND h = 'inf') ORDER BY date DESC LIMIT ".$anzahlShownTage);
    while ($row = mysql_fetch_row($erg) ) {
      
    echo $row['date']; //funktioniert
      
    $ergh = mysql_query ("SELECT count, date as datum, anz, h FROM sc_statistik WHERE (sid = ".$zeile['id']." AND date = ´".$row['date']."´ AND al = '1')");
    while ($rowh = mysql_fetch_row($ergh) ) {
    
    //keinerlei AUSGABE
    
    echo $row['date']; //bringt auch keine anzeige
      
    }
    }
    ?>

    So sieht es dann aus wenn es nicht funktioniert
    gesperrtes Bild
    So soll es aussehen wenn es funktioniert
    gesperrtes Bild

    das ein auszug aus der DB
    gesperrtes Bild
    Die einträge mit "inf" sind die tages zusammenfassung und die anderen die stunden zusammenfassung
    Wer Rechtschreibfehler findet darf sie behalten.
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Naja mit ' statt `, aber das Datum muss auf jeden Fall als String, also mit ' oder " umschlossen, angegeben werden.

    Zur eigentlichen Abfrage, es ist sicher sinnvoller beide Abfragen in einer zu vereinen, allerdings bin ich mir da auch nicht ganz sicher, weil du ja immer noch nicht geschrieben hast, wozu die Abfragen dienen.

    Wenn die innere Abfrage allerdings auch mehrere Ergebnisse liefert, dann ists wohl so schon nicht verkehrt, wobei selbst dann wohl eine gesonderte Abfrage besser ist, also eine Abfrage innerhalb einer Schleife, so etwas sollte möglichst vermieden werden.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Rock@wulf Hall Of Fame
    Registriert seit
    03.06.2004
    Beiträge
    3.282
    Beitragswertungen
    239 Beitragspunkte
    $erg = mysql_query ("SELECT count, ´date´, anz FROM sc_statistik WHERE (sid = ".$zeile['id']." AND h = 'inf') ORDER BY ´date´ DESC LIMIT ".$anzahlShownTage);
    while ($row = mysql_fetch_row($erg) ) {
    echo $row['date']; //funktioniert
    $ergh = mysql_query ("SELECT count, ´date´ as datum, anz, h FROM sc_statistik WHERE (sid = ".$zeile['id']." AND ´date´ = '".$row['date']."' AND al = '1')");
    while ($rowh = mysql_fetch_row($ergh) ) {



    Zuletzt modifiziert von Rock@wulf am 18.06.2012 - 14:57:41
    Meine Postings repräsentieren meine Meinung wenn nicht anders gekennzeichnet.
    MFG Rock@wulf
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    SteKu Mitglied
    Registriert seit
    25.03.2007
    Beiträge
    259
    Beitragswertungen
    2 Beitragspunkte
    @Mairu
    Es gibt insgesamt 3 schleifen

    1. Schleife - liest id aus tabelle1

    2. Schleife - liest anhand der id(1.Schleife) aus tabelle2 die passenden hörer(count) und eintragungen(anz) vom cron aus, und natürlich das passende datum(date)

    3. Schleife - soll anhand datum(date) aus 2.Schleife die hörer(count) und eintragungen(anz) mit al=1 auswerten

    alle 3 schleifen schließen
    Wer Rechtschreibfehler findet darf sie behalten.
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Edit: Zu beachten, der Beitrag ist vor dem Post davor entstanden zwinker

    Zu deinem "Problem", wenn du schreibst `date` AS datum, dann ist das dann auch $rowh['datum'] und nicht $rowh['date'].

    Allerdings nutzt du bei beiden mysql_fetch_row, was kein $row['date'], sondern $row[0] ... usw zurückliefern sollte.

    Also nachdem ich jetzt deinen letzten Post gesehen hab, kannst du die Abfrage doch einfach als eine Abfrage machen.

    //sh -> statistic hour, sd -> statistic day
    $erg = mysql_query('SELECT sd.`count` AS dcount, sd.`date`, sd.`anz`, sh.`count` AS hcount, sh.`anz` AS hanz, sh.`h`
    FROM `sc_statistik` AS sd
        INNER JOIN `sc_statistik` AS sh ON sd.`date` = sh.`date` AND sd.`sid` = sh.`sid`
    WHERE 
        sd.`sid` = ' . $zeile['id'] . ' AND sd.`h` = "inf" AND dh.`al` = "1"
    ORDER BY sd.`date`, sh.`h` DESC LIMIT ' . $anzahlShownTage);
    
    $prevDate = '';
    while ($row = mysql_fetch_assoc($erg)) {
        if ($prevDate != $row['date']) {
            $prevDate = $row['date'];
            //neues Datum, Tabellenzeile dafür ausgeben
            //dcount, date und anz verwenden
        }
        //jede Stunde eines Datums
        //hcount, hanz, h verwenden
    }


    Wenn du doppelt zählst, also einmal für jede Stunde und nochmal extra für den Tag, solltest du das ändern, und nur die für die Stunden zählen, die kannst du ja ganz einfach dann zusammenfassen und hast die eines Tages.

    Mir ist aber auch nicht klar, was count und anz ist, weil ja beides Anzahl heißt.

    Wenn ich weiter darauf hinweisen darf, Variablenname wie $anzahlShownTage solltest du vermeiden, eine Sprache sollte reichen.


    Zuletzt modifiziert von Mairu am 18.06.2012 - 15:21:59
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    SteKu Mitglied
    Registriert seit
    25.03.2007
    Beiträge
    259
    Beitragswertungen
    2 Beitragspunkte
    ZitatZitat geschrieben von Mairu

    Wenn ich weiter darauf hinweisen darf, Variablenname wie $anzahlShownTage solltest du vermeiden, eine Sprache sollte reichen.


    Die stammt übrigens aus ilch zwinker

    <?php 
    #   Copyright by: Manuel
    #   Support: www.ilch.de
    
    
    defined ('main') or die ( 'no direct access' );
    
      $title = $allgAr['title'].' :: Statistik';
      $hmenu = 'Statistik';
      $design = new design ( $title , $hmenu );
      $design->header();
    
    	$anzahlShownTage = 7;
    ...
    ?>

    Danke erstmal für die mühe ich werde es später mal testen.


    Zuletzt modifiziert von SteKu am 18.06.2012 - 15:45:14
    Wer Rechtschreibfehler findet darf sie behalten.
    0 Mitglieder finden den Beitrag gut.
  13. #13
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Ok, das ist natürlich ungünstig zunge

    Allerdings muss ich zu meinem Schutz sagen, dass das nicht aus meiner Feder stammt zwinker
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten