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"> </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>";