CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
18.12.2017, 11:54:23
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 52
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"> </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>";
|
18.12.2017, 13:19:57
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: MySQL/PHP, effektives Kalenderjahr eingrenzen
Hallo,
kann Dein Problem gemäß Deiner Beschreibung (noch) nicht nachvollziehen.
Du musst unterscheiden, möchte ich die Teilnahme an Rennserie(n) (und damit an den dazugehörigen Rennen) oder an nur Rennen ohne Rennserienbezug auswerten.
Ermittlung der Anzahl der Teilnahmen an Rennen in einem Jahr (unabhängig von Rennserien) sollte kein Problem darstellen, sie erfolgt nur über Tabelle RENNEN - ok?
Die Ermittlung der Teilnahmen an Rennen aus Rennserien erfolgt über Tabelle RENNEN via Tabelle RENNSERIEN (wegen der Ermittlung Jahr des Starts der Rennserie). Also prüfen aller Rennen deren Rennserien im gewünschtem Jahr gestartet wurde.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
18.12.2017, 13:42:17
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 52
Beiträge: 10
|
|
AW: MySQL/PHP, effektives Kalenderjahr eingrenzen
Hallo vt1816
Danke für deine Antwort.
Ich versuche es nochmal etwas zu erläutern.
In den Rennserien (Tabelle season) sind die Renn-Saisons abgebildet.
Beispielsweise: Deutsche Tourenwagen Masters
Dazu weitere Attribute wie die eindeutige ID, Kürzel, das Jahr, ein zweites Jahr falls die Serie über den Jahreswechsel stattfindet, etc.
In den Rennen (Tabelle race) sind die eigentlichen Rennen.
Beispielsweise: Hockenheim
Dazu weitere Attribute wie das Datum, Bezug zur Rennserie bzw. Saison, etc.
By the way gibts noch die Tabelle raceseason, wo die Rennen explizit mit den Rennserien verknüpft sind, da ein Rennen ja leider auch zu mehreren Rennserien gehören kann....
Nun, wie gesagt, fix programmierte Auswertungen sind einfach.
Ist ein explizites Jahr oder Jahrzehnt vorgegeben, dann ist das Datum im Script einfach eingegrenzt auf z.B. between 2017-01-01 and 2017-12-31 bzw. 2010-01-01 and 2019-12-31.
Schwierig wird es nur wenn der Benutzer auf der Webseite aus einem Dropdown Menu ein Jahr selektieren kann. Diese Liste wird gefüttert aus DISTINCT year from season.
Nehmen wir beispielsweise 2016.
Dann habe ich aber bei Rennserien ein Problem wo entweder a) die Saison über 2015/2016 geht. Also in der season das year = 2015 und das year2 = 2016 ist. Dann wird diese Rennsaison schlicht nicht berücksichtigt.
Bzw. bei einer Saison 2016/2017 habe ich dann auch die Rennen von 2017 in der Rechnung.
Nur aus der Tabelle race die Daten ziehen wäre wie gesagt einfach, mit einem zusätzlichen Attribut wo nur das effektive Jahr vom Rennen drin ist. Aus dem Renndatum kann ich ja das Jahr nicht ziehen für die Drop-Down Liste.
Also, ohne das zusätzliche Attribute sehe ich zwei Lösungen. Entweder ich kann das Jahr was in der Variable mitkommt, nachher auch zur Eingrenzung vom Renndatum herziehen. Oder man kann irgendwie aus einem Datum YYYY-MM-DD das Jahr distinct rausziehen für die Anzeige in der Dropdown Liste und dann auch wieder auf die Rennen ummünzen.
|
18.12.2017, 14:08:07
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: MySQL/PHP, effektives Kalenderjahr eingrenzen
Zitat:
Zitat von bgr
[..]
In den Rennserien (Tabelle season) sind die Renn-Saisons abgebildet.
Beispielsweise: Deutsche Tourenwagen Masters
Dazu weitere Attribute wie die eindeutige ID, Kürzel, das Jahr, ein zweites Jahr falls die Serie über den Jahreswechsel stattfindet, etc.
...
|
Da hast Du doch schon alles was Du benötigst.
Persönlich hätte ich hier Beginn und Ende besser gefunden - ist aber Geschmackssache.
Vorschlag für einen Lösungsweg: Mittels der RennID aus RACE in SEASON das Rennserien Jahr (Datum1 & Datum2) dem abgefragten Jahr aus Dropbox vergleichen.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
18.12.2017, 15:03:17
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 52
Beiträge: 10
|
|
AW: MySQL/PHP, effektives Kalenderjahr eingrenzen
@vt1816
Deine Lösung verstehe ich jetzt wiederum nicht.
Was soll ich mit dem Jahr bzw. Jahr2 vergleichen?
Die Lösung mit year und year2 habe ich so gemacht, weil es auch noch für weitere Abfragen benutzt wird. Beispielsweise für einen Jahreskalender.
|
18.12.2017, 18:10:14
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: MySQL/PHP, effektives Kalenderjahr eingrenzen
Deine Frage war doch, wie Du es anstellen solltst bei der Bereitstellung von Auswahlmöglichkeiten in einer Dropbox die dazugehörigen richtigen Daten aus Deinen Datenbanktabellen zu bekommen, wenn Rennen zu einer Rennserie gehören, die über mehrere Jahre (im Allgemeinen in ZWEI Jahren [2015/2016 oder 2016/2017]) gehen - oder? Berichtige mich bitte gegebenenfalls.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:40:42 Uhr.
|