strpos() Problem

Metha

Mitglied
Hallo zusammen!

Ich will mir alle Jahre aus einer Datenbank ausgeben lassen, in denen etwas in der Datenbank gespeichert wurde. Wenn ein Jahr aber schon in der Variablen ist, dann soll die Variable nicht erneut um das Jahr ergänzt werden.

Das Problem ist, dass er zwar alle Daten ausleißt, aber wie im HTML-Code zu sehen, die Jahre auch doppelt und dreifach vorkommen.

$erg->zeit ist ein Unix Timestamp

PHP:
$qry=mysql_query('SELECT zeit FROM md_counter_user ORDER BY id DESC');
while($erg=mysql_fetch_object($qry))
	{
	$zeit=date('Y', $erg->zeit);
	$pos=strpos('<option value="'.$zeit.'">'.$zeit.'</option>', $this->jahresliste);
	if($pos === false)
		{
		$str=wordwrap('<option value="'.$zeit.'">'.$zeit.'</option>', 42);
		$this->jahresliste.=$str;
		}
	}

HTML:
<select name="jahr">
	<option value="0" selected>Keine Angabe</option>
	<option value="0" selected></option>
<option value="2005" selected>2005</option><option value="1973">1973</option><option value="2005" selected>2005</option><option value="2005" selected>2005</option>
		</select>

Weiß jemand wo mein Fehler ist?
Gruß Micha
 
Hallo,

ich weiss zwar nicht ob das weiterhilft - aber ich denke ich hatte letztens genau das selbe Problem und habe es mit folgendem Code gelöst:
PHP:
$jahreszahlaktuell = date(Y);
$jahrauswertung = mysql_query("SELECT YEAR(datum) AS jahreszahl FROM $tabelle WHERE 1 GROUP BY jahreszahl;") OR die(mysql_error());
      while($jahrauswertungen = mysql_fetch_array($jahrauswertung)) {
      echo "<option ";
           if($jahrauswertungen['jahreszahl'] == $jahreszahlaktuell) { echo "selected"; }
                echo ">".$jahrauswertungen['jahreszahl']."</option>";
      }
Das musst du halt noch (die Query) auf deine Bedürfnisse umschreiben.
 
@voodoo
Kannst du mir deine Abfrage noch ein bissel erläutern?

$Query = "select `zeit` from `md_counter_user` group by `zeit` order by `id` desc";

Wenn ich das Richtig Versteht, werden bei der Abfrage die Datensätze schon als fertiges ergebnis ausgegeben - Sprich jedes Jahr kommt nur einmal vor.

Wenn ich aber folgendes mach:
PHP:
$qry=mysql_query('select `zeit` from `md_counter_user` group by `zeit` order by `id` desc');
	while($erg=mysql_fetch_object($qry))
	{
	echo date('Y', $erg->zeit.'<br>');
	}
Bekomme ich wieder alle Jahr als ausgabe. Also die doppelung sind nicht weg...
 
Zuletzt bearbeitet:
Ich dachte "zeit" seit halt das Jahr, habe jetzt gesehen dass es der timestamp ist.
Probier's mal mit dem Query vom dwex :)
 
Also dwex Query kalppt bei mir auch nicht :(
An sich brauche ich ja nur eine Abfrage, die mir alle vorkommenden Jahre einer MySQL Tabelle liefert.
Und die Spalte, welche zu überprüfen ist, ist ein UNIX Timestamp.
Da muss es doch eine Möglichkeit geben....?
 
Hallo nochmal,

du musst natürlich die Query schon auf deine Bedürfnisse umschreiben und nicht einfach blind kopieren. Das habe ich aber geschrieben.

So nun mal die Query wie ich denke das sie bei dir funktionieren sollte:
PHP:
$jahreszahlaktuell = date(Y); 
$jahrauswertung = mysql_query("SELECT YEAR(SEC_TO_TIME( (
UNIX_TIMESTAMP( zeit)))) AS jahreszahl FROM md_counter_user WHERE 1 GROUP BY jahreszahl;") OR die(mysql_error()); 
      while($jahrauswertungen = mysql_fetch_array($jahrauswertung)) { 
      echo "<option "; 
           if($jahrauswertungen['jahreszahl'] == $jahreszahlaktuell) { echo "selected"; } 
                echo ">".$jahrauswertungen['jahreszahl']."</option>"; 
      }
Bei den Klammern bin ich mir nicht sicher ob du soviele brauchst - musst halt probieren.
Das ganze habe ich aber nicht getestet - das müsstest du für mich machen ;-)

Wenn das nicht klappt dann probier:
PHP:
$jahreszahlaktuell = date(Y); 
$jahrauswertung = mysql_query("SELECT YEAR(SEC_TO_TIME( zeit ) AS jahreszahl FROM md_counter_user WHERE 1 GROUP BY jahreszahl;") OR die(mysql_error()); 
      while($jahrauswertungen = mysql_fetch_array($jahrauswertung)) { 
      echo "<option "; 
           if($jahrauswertungen['jahreszahl'] == $jahreszahlaktuell) { echo "selected"; } 
                echo ">".$jahrauswertungen['jahreszahl']."</option>"; 
      }

Ausserdem würde ich dir die MySQL Datums- und Zeitfunktionen empfehlen zu lesen.
 
Zuletzt bearbeitet:
Ich bekomme es nicht hin. Ich mach da wohl grundsätzlich irgend was falsch. Danke für die gute hilfe, aber dein Code wollt auch nicht funktionieren.

Habe jetzt schon auf andere art und weise versucht Herr des Problems zu werden, aber da tut sich irgendwie nichts.

Ist es vielleicht besser wenn ich keinen Timestamp abspeicher, sondern die MySQL Spalte als DATETIME definiere?
 
Das mit DATETIME wäre natürlich opti - du kannst aber auch mal einen Dump deiner SQL-Datei machen dann probier ich das mal aus.
 
Danke, aber ich werde wohl auf DATETIME umstellen. So wie ich in der MySQL Manual gelesen habe sind die Abfragemöglichkeiten auch viel "Simpler", da DATETIME ja ein MySQL Format ist.

Was wäre denn z.B. die genaue Abfrage, wenn ich die vorkommenden Jahreszahlen abfragen möchte. Angenommen Tabellenname 'asd', Spaltenname 'zeit'?

Mein Ansatz:
PHP:
$qry=mysql_query('SELECT YEAR(zeit) FROM asd');
while($erg=mysql_fetch_object($qry))
{
echo $erg->zeit;
echo '<br>';
}
 
Zurück