Einzelnen Beitrag anzeigen
  #1  
Alt 18.12.2017, 10:54:23
bgr bgr ist offline
Anfänger
 
Registriert seit: May 2016
Alter: 51
Beiträge: 10
MySQL/PHP, effektives Kalenderjahr eingrenzen

Hallo zusammen

Ich habe ein kleines kniffliges Problem.

In meiner Datenbank hat es eine Sammlung von Renneinsätzen.
Dazu gibt es mehrere Auswertungen. Beispielsweise das Total von Renneinsätzen von Fahrern pro Jahr, Dekade, etc.

Nun gibt es leider Rennserien die über den Jahreswechsel hinweg stattfinden, d.h. zu zwei Jahren gehören.
Dazu habe ich in der Tabelle mit den Rennserien zwei Attribute (year1, year2).
Die einzelnen Rennen sind in einer eigenen Tabelle und referenzieren auf die ID von der Rennserie.

Wenn ich nun fix programmierte Abfragen habe, und auf das Kalenderjahr eingrenzen will, dann ist das kein Problem. Dann grenze ich einfach auf das Renndatum ein (beispielsweise between 2017-01-01 and 2017-12-31).
Aber wenn ich eine drop down Liste zur Verfügung stelle, wo man das Jahr auswählen kann, dann wird es schwierig.
Das ausgewählte Jahr wird als Variable in der Abfrage übernommen.
Will ich nun beispielsweise eine Top 10 Liste der Fahrer mit den meisten Rennen von 2017, und da ist eine Rennserie dabei, die auch schon 2016 Rennen hatte, dann zählt es diese dazu.

Die einfachste Lösung wäre sicher, dass ich einfach bei den Rennen nebst dem Datum noch ein zusätzliches Attribut mit dem Jahr mache.
Dann könnte ich die erwähnte Abfrage auch auf eine einzige Tabelle eingrenzen.
Bedeutet dann aber wieder redundante Daten und ist nicht im Sinne einer solchen Datenbank.

Mir schwebt da eher vor dass ich in der WHERE Klausel den Wert aus der YEAR Variable auch noch brauchen könnte um das effektive Kalenderjahr einzugrenzen.
So im Stil von between Variable-01-01 and Variable-12-31.

Vielleicht hat mir jemand die Syntax für eine solche Lösung. Oder eine andere Lösung.

Vielen Dank.

PHP-Code:
// Parameter
$servername = "www.qqq.de"; 
$benutzer   = "xxx";
$passwort   = "yyy";
$datenbank  = "zzz";

    // DB-Verbindung herstellen 
    $verbindung = mysql_connect($servername, $benutzer, $passwort); 
    // Die Datenbank auswählen 
    mysql_select_db($datenbank); 

    /** 
     *  Formular zu choicedate 
     */ 
        // DB Abfrage 
        $anfrage = "SELECT DISTINCT year FROM season
                    WHERE year NOT IN (0000)
                    ORDER BY year asc";
        $ergebnis = mysql_query($anfrage);

?> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<p align="center"> 
<select name="year"> 
<?php 

        
while( $datensatz mysql_fetch_assoc($ergebnis) ) { 
            echo 
'<option value="'.$datensatz['year'].'">'.$datensatz['year'].'</option>';
        } 

?>

</select> 
<input type="submit" value="Submit" name="submit:choicedate"> 
</p>
</form>

<p align="center">&nbsp;</p>
<p align="center">

<?php 
    
if( isset($_POST['submit:choicedate']) ) { 

    }

//**********************************************************************


/** 
     *  Verarbeitung choicedate 
     */ 
        // DB Abfrage 
        
$anfrage2 =  "
            SELECT COUNT(distinct season.short, race.date)'num',driver.fullname'driver', season.year'gg', history.driver1
                    
              FROM 
                    `history`,`driver`,`season`,`race`
    WHERE season.year = '"
.mysql_real_escape_string($_POST['year'])."'
                AND history.driver1 = driver.id
                AND history.race = race.id
                AND race.season = season.id
    GROUP BY history.driver1
    ORDER BY num DESC"
;

$result2 mysql_query($anfrage2);

// Wieviel wurde gefunden?

$rows2 mysql_num_rows($result2);

// Den Kopf der HTML-Tabelle generieren
echo "<TABLE BORDER=\"1\">";
echo 
"<TR>";
echo 
"<TD BGCOLOR=\"#BBBBBB\"><B>NUMBER OF RACES</B></TD>";
echo 
"<TD BGCOLOR=\"#BBBBBB\"><B>DRIVER</B></TD>";
echo 
"</TR>";


// Daten auslesen

for ($i2=0;$i2<50;$i2++)                 // Die Ergebnisdatensätze werden in einer Schleife abgeholt

  
{

  
$data2 mysql_fetch_object ($result2);


  echo 
"<TD>$data2->num</TD>";
  echo 
"<TD>$data2->driver</TD>";
  echo 
"</TR>";

  }

// Das Ende der HTML-Tabelle generieren
echo "</TABLE>";
Mit Zitat antworten