mySQL abfrage in arrry laden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mySQL abfrage in arrry laden

    hallo leute

    brauche hilfe, ich möchte eine mysql-abfrage in einen array laden und zwar so das ich für jeden tag im monat einen arrayeintrag habe, also max. 31. nun möchte ich aber nur an denen tagen an denen auch ein eintrag in der db ist im array auffühlen.
    hinzu kommt noch das ein eintrag ein von-datum und ein bis-datum hat. das heist alle tage dazwischen soltten im array auch aufgefült werden.
    hier mein sql -query (arbeite auf db version MySQL 3.23.58 hab noch keine unterstüzung für datums funktionen, die db-felder sind alls DATETIME definiert)

    PHP-Code:
    $query "SELECT a.abwesenheitID, SUBSTRING( a.vondatum, 9, 2  ) vday, "
                
    "SUBSTRING( a.vondatum, 6, 2  ) vmonat, SUBSTRING( a.vondatum, 1, 4  ) vjahr, "
                
    "SUBSTRING( a.vondatum, 12, 2  ) vzeit, SUBSTRING( a.bisdatum, 9, 2  ) bday, "
                
    "SUBSTRING( a.bisdatum, 6, 2  ) bmonat, SUBSTRING( a.bisdatum, 1, 4  ) bjahr, "
                
    "SUBSTRING( a.bisdatum, 12, 2  ) bzeit, "
                
    "a.titel, a.beschreibung, k.kategoriename, e.bezeichnung, f.hexwert ".
                
    "FROM abwesenheit a, farbe f, kategorie k, erreichbarkeit e ".
                
    "WHERE a.benutzerFS =  '1' "
                
    "AND a.erreichbarkeitFS = e.erreichbarkeitID "
                
    "AND a.kategorieFS = k.kategorieID "
                
    "AND k.farbeFS = f.farbeID ".
                
    "AND (SUBSTRING( a.vondatum, 6, 2  ) = '$sqlmonat' OR SUBSTRING( a.bisdatum, 6, 2  ) = '$sqlmonat')"
    wie mach ich das?


    thanks

  • #2
    [list=1][*]Problem: Mal angenommen, ein Eintrag geht von 15. Februar bis 14. April
    und du fragst den März ab ... das wird hier berücksichtigt[*]alle Tage direkt in der Query zu ermitteln wäre ein ganzes Stück komplizierter,
    daher lieber Anfangs- und Endtag ermitteln - die beiden if´s sorgen dafür:
    Liegt das von- bzw bis-Datum im Monat, wird der Tag aus der DB gelesen;
    ansonsten gilt der 1. bzw. letzte des Monats.
    Die Tage dazwischen werden in der inneren Schleife markiert.[/list=1]
    PHP-Code:
    $dpm date('t'mktime(2,0,0,$sqlmonat,2,date('Y'))); // benötigt PHP >= 4.1.0
    $von "$sqlmonat-01";
    $bis "$sqlmonat-$dpm";
    $liste $mark = array();

    $query "select a.*,
      if (SUBSTRING(a.vondatum, 6) > '
    $von', DAYOFMONTH(a.vondatum), 1) as von,
      if (SUBSTRING(a.bisdatum, 6) < '
    $bis', DAYOFMONTH(a.bisdatum), $dpm) as bis,
      k.kategoriename, e.bezeichnung, f.hexwert
      FROM abwesenheit a, farbe f, kategorie k, erreichbarkeit e
      WHERE a.benutzerFS =  '1'
        AND a.erreichbarkeitFS = e.erreichbarkeitID
        AND a.kategorieFS = k.kategorieID
        AND k.farbeFS = f.farbeID
        AND (
          '
    $von' between SUBSTRING( a.vondatum, 6) and SUBSTRING( a.bisdatum, 6)
          OR '
    $bis' between SUBSTRING( a.vondatum, 6) and SUBSTRING( a.bisdatum, 6)
        )"
    ;
    $result mysql_query($sql) or die("<b>$sql</b><br>"mysql_error());
    for (
    $i=0$row mysql_fetch_assoc($result); $i++)
    {
      
    $liste[] = $row;
      for(
    $tag=$row['von']; $tag<=$row['bis']; $tag++)
        
    $mark[$i][] = $i;

    Damit bekommst du in $liste eine Liste aller passenden Einträge
    und in $mark für jeden Tag des Monats entweder NULL
    oder ein Array mit den Indizes der Termine, die an diesem Tag liegen.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar

    Lädt...
    X