# Abfrage eindämmen



## SchwarzerWolf (2. Juli 2002)

ich hab folgende abfrage:
$sql='SELECT * FROM film WHERE startdatum >= CURDATE() - INTERVAL 14 DAY

da werden mir die daten ausgelesen allerdings gibt es in der DB bzw in der spalte "startdatum" auch werte wie folgt: "k. A." und diese sollen ausgelassen werden ! 

Frage: wie mach ich das ?


----------



## gecko (2. Juli 2002)

... AND WHERE startdatum !='k. A.'


----------



## SchwarzerWolf (2. Juli 2002)

hmm irgendwie gibt er mir nun gar nix mehr aus ich post ma den ganzen quelltext der datei vielleicht hab ich ja noch woanders nen fehler:

include("open.inc.php");
$sql='SELECT * FROM film WHERE startdatum >= CURDATE() - INTERVAL 14 DAY AND WHERE startdatum !="k. A."';
echo $sql;

$result=mysql_query($sql,$conn);
if($result)
{
while($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
echo $row["f_name"].'&nbsp;'.$row["startdatum"].'<br>';
}
}


----------



## SchwarzerWolf (2. Juli 2002)

ahja nu machters nachdem ich curdate mit now ausgetauscht hab allerdings beachtet er nun den interval nimmer


----------



## gecko (2. Juli 2002)

nimm das zweite WHERE weg ...
WHERE blah1=1 AND blah2=2
und nicht
WHERE blah1=1 AND WHERE blah2=2

musst nicht alles woertlich nehmen


----------



## SchwarzerWolf (2. Juli 2002)

hm das hab ich mittlerweile auch schon gemacht  

aber irgendwie will er den interval nich mehr, der rest funz nun also er gibt mir die gesamten filme aus die noch kommen die schon waren und die "k. A." zeigter nicht ( was auch so soll ) allerdings soll er bloß die filme zeigen deren startdatum ja in den nächsten 14 tagen liegt und nicht alle ( geht so bis ca mitte 2003 )


----------



## gecko (2. Juli 2002)

oehm ... da ich der INVERVAL funktion eh nicht vertraue, mach doch lieber dein interval selber:

WHERE startdate BETWEEN 'startdatum' AND 'endedatum'
oder
WHERE startdate > 'startdatum' AND startdate < 'endedatum'

in startdatum hast du dann "heute" drin und endedatum heute+14 tage


----------



## SchwarzerWolf (2. Juli 2002)

stümmt daran hab ich noch gar ni gedacht allerdings hab ich nun ein anderes prob. wie ich das heutige datum bestimm weiß ich aber ich kann ja nicht 
$endwert=date("Y-m-d");
$endwert+14; machen zumindestens kommt da nix gescheites raus....

und selber das datum eintragen is auch doof weil müßt ich jeden tag des ändern


----------



## SchwarzerWolf (2. Juli 2002)

öhm glaub habs  while schleife oda ?


----------



## gecko (2. Juli 2002)

nana, nix while schleife ... nun fang mal nicht an unsauber zu werden 

$startdatum = date("Y-m-d",time()); 
$enddatum = date("Y-m-d",time()+(60*60*24*14));

got it ?


----------



## SchwarzerWolf (3. Juli 2002)

wölfe sind unsauber  

hmm naja habs mit ner for schleife gemacht ( gestern nachmittag noch ) aber erklär mir mal die zahlen die da in der klammer stehen !?!


----------



## gecko (3. Juli 2002)

also: time() ist die aktuelle zeit (unix-timestamp -> zeit in sekunden nach dem 01.01.1970 00:00)

uuund 60 sekunden * 60 = ? richtig eine stunde!
das ganze mal 24 macht einen tag und dann nochmal * 14 und schon bist du 14 tage weiter ... das wandelst du dann per date() in dein timestamp format um und erledigt...

fein waere natuerlich gleich den unix-timestamp in der datenbank zu benutzen, mit dem kann man besser rechnen und auch viel komfortabler formatieren.

kann unter umstaenden aber auch nervig sein, der unix-timestamp ist in seiner "rohform" halt ziehmlich unleserlich ... muss man von fall zu fall abwaegen. einiges ekliges datumsgerechne ist besser mit einem mysql-timestamp zu bewaeltigen. kannst dir ja mal gedanken machen


----------



## SchwarzerWolf (3. Juli 2002)

jo stimmt hab grad gemerkt das des mit der for schleife ni so der bringer is weil 2002-07-33 is ja bissel...naja  

habs nu so gemacht wie beschrieben hast 

thx


----------



## gecko (3. Juli 2002)

und alle waren gluecklich 
bittschä


----------



## SchwarzerWolf (4. Juli 2002)

so das andere prob. is zwar gelöst allerdings hab ich nun ein anderes was zwar damit nicht viel zutun hat aber sich auch ums eindämmen dreht 

und zwar *luft hol*

will ich nun eine Navi bauen...wo von den Startdaten ( die oben beschrieben wurden also im forumat YYYY-MM-DD sind ) nur die Jahreszahlen ausgeben...normal is das kein prob. *WENN* jedes jahr nur ein startdatum hät...aber wie wir wissen starten nicht nur an einem tag im jahr filme ( auch nich hier in Österreich *fg* ) 

Fazit: ich bekomm ne liste mit 53 jahreszahlen *PRO* jahr...sollte aber wenn nur einmal die Jahreszahl ausgegeben werden...und der distinct satz sortiert ja nur die aus die exakt das selbe datum haben und substr. kürzt mir das jahr raus also das nur die jahres zahl gezeigt wird...

DER QUELLCODE:
include("open.inc.php");
$sql='SELECT DISTINCT startdatum FROM film WHERE startdatum LIKE "200%" ORDER BY startdatum ASC';
$result=mysql_query($sql,$conn);
if($result)
{
while($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
$datum=substr($row["startdatum"],0,4);
echo $datum.'<br>';
}
}

jemand ne idee ? *zu gecko gugg*


----------



## gecko (4. Juli 2002)

hmmmm versuchs doch mal mit:

SELECT distinct SUBSTRING(startdatum,0,4) FROM film WHERE startdatum LIKE "200%" ORDER BY startdatum ASC';

sollte passen ...


----------



## SchwarzerWolf (4. Juli 2002)

hmmmm naja nu is das so das mir nichts mehr angezeigt wird


----------



## gecko (4. Juli 2002)

siehst du! problem geloest 
ne, probier mal ein bisschen mit der SUBSTR funktion rum .. kann sein das die syntax doch nen bisschen anders ist, hab das nur gerade frei ausm kopf hingeschrieben.


----------



## SchwarzerWolf (4. Juli 2002)

hmm hab grad bissel in google geguggt weil in meinem PHP/MySQL zu dem thema nix find im bezug auf sql, allerdings stehts in den google groups so wie dus geschrieben hast...also vermut ich ma das ick nun irgendwo andersn nen fehler drin hab


----------



## SchwarzerWolf (4. Juli 2002)

JUHUUUUUUU ich habs 

und zwar darfst da nich bei NULL anfangen wie in PHP sondern bei EINS


----------



## SchwarzerWolf (4. Juli 2002)

mist 

zu früh gefreut irgendwie machter das nur im PHPMyAdmin ansonsten bringter mir nur leerzeilen...


----------



## SchwarzerWolf (4. Juli 2002)

LOL fehler gefunden *ggggggggggggggggg*

bei $row["SUBSTRING(startdatum,1,4)"] <- muß das dann auch sooo aussehen


----------



## gecko (4. Juli 2002)

ich haett in der mysql doku nachgeguckt 
dort steht das alles ...
http://www.mysql.com/doc/S/t/String_functions.html


```
$row["SUBSTRING(startdatum,1,4)"]
```

das ist allerdings sehr umstaendlich, machs lieber so:

SELECT distinct SUBSTRING(startdatum,0,4) as year FROM film WHERE startdatum LIKE "200%" ORDER BY startdatum ASC; 

und dann

```
$row["year"]
```

besser is


----------



## SchwarzerWolf (5. Juli 2002)

nu in der doku war ich irgendwann auch gelandet


----------

