SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQL

MySQL Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQL diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 18.12.2017, 10:54:23
bgr bgr ist offline
Anfänger
 
Registriert seit: May 2016
Alter: 45
Beiträge: 10
bgr befindet sich auf einem aufstrebenden Ast
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
  #2  
Alt 18.12.2017, 12:19:57
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.640
vt1816 hat die Renommee-Anzeige deaktiviert
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!
Mit Zitat antworten
  #3  
Alt 18.12.2017, 12:42:17
bgr bgr ist offline
Anfänger
 
Registriert seit: May 2016
Alter: 45
Beiträge: 10
bgr befindet sich auf einem aufstrebenden Ast
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.
Mit Zitat antworten
  #4  
Alt 18.12.2017, 13:08:07
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.640
vt1816 hat die Renommee-Anzeige deaktiviert
AW: MySQL/PHP, effektives Kalenderjahr eingrenzen

Zitat:
Zitat von bgr Beitrag anzeigen
[..]
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!
Mit Zitat antworten
  #5  
Alt 18.12.2017, 14:03:17
bgr bgr ist offline
Anfänger
 
Registriert seit: May 2016
Alter: 45
Beiträge: 10
bgr befindet sich auf einem aufstrebenden Ast
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.
Mit Zitat antworten
  #6  
Alt 18.12.2017, 17:10:14
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.640
vt1816 hat die Renommee-Anzeige deaktiviert
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!
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:55:36 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.


© 2001-2018 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt