Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
where Abfrage [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
where Abfrage


 
Heiner
28-06-2002, 11:29 
 
Hallo,

ich habe ein Selectfeld mit einer jahresangabe.

$timeform .= '<select name="year" ><option value="0"></option>';
for( $i = 2002; $i <= 2025; $i++ )
{
$timeform .= '<option value="' . $i . '"' . ( $i == $year ? ' selected' : '' ) . '>' . $i . '</option>';
}
$timeform .= '</select>';

In der Datenbank ist das Datum (dateday) mit 0000-00-00 abgespeichert.

Jetzt möchte ich eine Auflistung, wo alle Einträge aufgezählt sind,
die z.B. das Jahr 2003 haben.

SELECT DISTINCT ........, date.dateday, ...... FROM tabelle1 As user, tabelle2 As date WHERE user.userid=date.userid AND substr(date.dateday,0,4)=$year ORDER BY date.dateday " );

Der Fehler liegt sicherlich beim substring??


EDIT
Ich habe zum testen dieses eingefügt, und mich somit auf einen
bestimmten Datenbankeintrag bezogen:

AND date.dateday = 2003-06-13

bekomme aber trotzdem alle Datenbankeinträge angezeigt ???

muß natürlich '2003-06-13' heißen, dann klappts, also Fehler
doch im substring?

/EDIT

Gruß
Heiner

 
slarti
28-06-2002, 14:42 
 
probier doch mal

...AND substr(date.dateday,0,4)='2003'...

dann wießt du zumindest, ob es am substr() liegt.

 
Heiner
28-06-2002, 18:30 
 
Hallo,

nach deinem Beispiel:
AND substr(date.dateday,0,4)='2003'

kommt das hier:

MySQL: You have an error in your SQL syntax
near '(date.dateday,0,4) = '2003' ORDER


gebe ich zum Testen ein:
AND date.dateday = '2003-06-13'

dann funktioniert es, es wird dieser Datensatz angezeigt.

EDIT
Noch ein Test:

$test = substr(date.dateday,0,4);

im Abfrage string: AND $test='2003'

Fehlermeldung: Unknown column 'date' in 'where clause'

das gibt dann "date" aus, es wird als das Wort zerlegt,
bei 0,2 wir "da" ausgegeben, und nicht der Wert der Spalte??

bei :
$test = intval(substr(date.dateday,0,4));
wird "0" ausgegeben.

 
Heiner
29-06-2002, 11:52 
 
Falls es bei der oberen keine Lösung gibt, bin
ich da jetzt etwas anders herangegangen.

Dazu muß ich aber das Format aus der Datenbank 0000-00-00
umwandeln in einem Timestamp 0000000000

Wie kann man das machen?

 
crono
29-06-2002, 11:56 
 
1. Du speicherst in die Datenbank gleich den Timestamp rein
$time=time();

2. Du wandelst mit dateformat das datum um.

Bei 2 bin ich mir net sicher bin anfänger.

 
crono
29-06-2002, 11:58 
 
Edit:

Aber es müsste doch auch mit LIKE gehen oder?

$select = ("SELECT * FROM deine_tabelle_oder_auch_nicht_grins LIKE 2003%");
mysql_query($select,$verbindung);

 
hand
29-06-2002, 12:10 
 
Das Feld dateday ist welchen Feldtyps? Etwa Character?
Wenn ja solltest Du nach DATE konvertieren.
Wenn es sich um DATE oder DATETIME handelt stehen Dir doch alle datumspezifischen Abfrage- und Berechnungsmöglickeiten zur Verfügung.

Die Abfrage könnte dann wie folgt aussehen:

SELECT DISTINCT ........, date.dateday, ...... FROM tabelle1 As user, tabelle2 As date WHERE user.userid=date.userid AND YEAR(date.dateday)=$year ORDER BY date.dateday " );

http://www.mysql.com/doc/D/a/Date_and_time_functions.html
http://www.mysql.com/doc/D/A/DATETIME.html

Ansonsten würde ich mal den substring() wie folgt probieren:

.... AND substring(date.dateday,1,4) = '2003' ...

1. In der Select-Anweisung substring() anstatt substr().
2. Der SQL-Substring ist nicht nullrelativ!

http://www.mysql.com/doc/S/t/String_functions.html

 
Heiner
29-06-2002, 13:34 
 
Vielen Dank für die Hilfe, jetzt habe jedoch bereits alles
umgeschrieben und die Auflistung von Terminen nach
Monat und Jahr über eine checkbox namens "period gemacht.
Auf der Seite habe ich 2 selectfelder, Monat und Jahr.

So habe ich es versucht, searchstart und searchend funktionieren
und geben den richtigen Zeitpunkt aus.

Nur das Datum in der Datenbank 0000-00-00 wird immer
noch nicht in einen Timestamp umgewandelt 0000000000

if( $period == "yes" )
{
$searchstart = mktime(0, 0, 0, $startmonth, 1, $startyear);
$searchend = mktime(0, 0, 0, $startmonth + 1, 0, $startyear);
$date = mktime(0, 0, 0, substr(date.dateday, 5,2), substr(date.dateday, 8,2), substr(date.dateday, 0,4));

$zusatz = "AND ($date>$searchstart AND $date<$searchend)";

 
Heiner
29-06-2002, 14:30 
 
nochmal umgeschrieben:
so gehts auch, ohne das Datum der Datenbank umzuwandeln.

if( $period == "yes" )
{
$searchstart = sprintf ("%04d-%02d-%02d", $startyear, $startmonth, 1);
$searchend = sprintf ("%04d-%02d-%02d", $startyear, $startmonth + 1, 1);

$zusatz = "AND (date.dateday>$searchstart AND date.dateday<$searchend)";

}

dabei kommt heraus:

AND (date.dateday>2002-01-01 AND date.dateday<2002-02-01)

also ist jetzt bei date.dateday der Fehler.

 
goth
29-06-2002, 14:37 
 
@Heiner: Nur leider ist ein solche Vorgehen absolut nicht sinnvoll ... ein RDBMS gibt uns Datentypen, die für die Verwaltung entsprechender Daten auch verwendet werden sollten ...

... und wenn Du schon Strings vergleichen willst ... dann so:


$zusatz = "AND (date.dateday>'$searchstart' AND date.dateday<'$searchend')";

 
Heiner
29-06-2002, 14:52 
 
@goth

Vielen Dank,

jetzt funktioniert es.

Ich bin da noch am Anfang mit meinen Scripten,
deshalb weiß ich auch nicht genau welches
Vorgehen nun das Beste ist.

Ich hoffe diese nun endlich funktionierende
Variante der selektierten Auflistung von
Datenbankeinträgen verursacht keine Probleme.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:57 Uhr.