» »

[MySql]Poizvedba za datetime

[MySql]Poizvedba za datetime

jeryslo ::

Pozdravljeni!

V tabeli imam polje Date definirano kot tip datetime, torej takole izgledajo vnosi:
 DateTime

DateTime



Zdaj ko uporabnik izbere določen datum, npr. 2010/7/7, bi rad da se mi izpišejo vse možne ure za tisti dan. To mi je uspelo narediti s tem stavkom:

SELECT TIME(Date) FROM ws3600 WHERE DATE >= '2010/7/7' AND DATE <= '2010/7/8'


Toda zanima me, če obstaja kakšen bolj eleganten način, brez da je potrebno specificirati še zraven datum 2010/7/8?

dolenc ::

S čim je pa vmesnik narejen?

Oziroma kako uporabnik izbere datum?

Šlo bi verjetno samo z SELECT TIME(Date) FROM ws3600 WHERE DATE(Date) = '2010/7/7'

jeryslo ::

Uporabnik izbere datum preko javascript kolendarja, toda to ni važno. Sem pa to kar si ti napisal prvo probal, pa vrne samo 00:00:00 kar je logično saj če ne dodaš ure, torej če daš samo datum zgleda privzame vrednost za uro na 00:00:00.

dolenc ::

Pri meni dela, je ba db2 in ne mysql, zakaj pri tebi ne mi pa ni jasno

Probaj ime stolpca preimenovat v datum, ker mogoče ga pa ta date heca(ugibam).

Ne vem kako je to z javascriptom, ampak kot where pogoj lahko izbereš tudi vrednost, ki jo vnese uporabnik. WHERE DATE(datum) = imeSpremenljivke(ali polja)
Samo se ti malo zakomplicira, ker moreš potem še datum iz javascripta pretvorit v format mySqla, če je drugačen.

Zgodovina sprememb…

  • spremenil: dolenc ()

jeryslo ::

Sem potem kar takole naredil, edino malo robustno je napisano, ker pač moram imeti še eno spremenljivko za dodatni pogoj:
<?php
	$username="uporabnik";
	$password="";
	$database="test";
	
	$date = $_GET["d"];
	$timestamp = strtotime($date);
	$naslednjiDan = $timestamp + (1 * 24 * 60 * 60);// 1 dan; 24 ur; 60 minut; 60sekund
	$date2 =  date('Y/n/j', $naslednjiDan);


	$link = mysql_connect('localhost', $username, $password);
	if (!$link) {
		die('Could not connect: ' . mysql_error());
	}
	mysql_select_db("test", $link);
	$query="SELECT TIME(Date) FROM ws3600 WHERE DATE >= '" .$date. "' AND DATE < '" .$date2. "'";
	$result=mysql_query($query);
	if (!$result) {
		die('Could not query:' . mysql_error());
	}
	while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    	echo "<option>" .$row[0]."</option>";
	}

	mysql_free_result($result);
	
	mysql_close($link);
?>

Zgodovina sprememb…

  • spremenil: jeryslo ()

krho ::

Bolj zabavno je to, da mu je pustil narediti stolpec kjer je uporabil keyword kot ime. Še bolj zabavno je, da si parser ne polomi zob brez kvotanja.
Kaj je to '2010/7/8' za en blesav format zapisa datuma? iso zapis iso... tako pri poizvedbi kot pri vpisu v bazo... Ker jaz pri zgornjem zapisu, ne vem ali gre za 8 julij ali 7 avgust...
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net

Zgodovina sprememb…

  • spremenil: krho ()

jeryslo ::

krho je izjavil:


Kaj je to '2010/7/8' za en blesav format zapisa datuma? iso zapis iso... tako pri poizvedbi kot pri vpisu v bazo... Ker jaz pri zgornjem zapisu, ne vem ali gre za 8 julij ali 7 avgust...


Hmmm to sem tudi sam še malo razmišljal, bom verjetno spremenil da bo bolj uporabniku prijazno.

krho je izjavil:


Bolj zabavno je to, da mu je pustil narediti stolpec kjer je uporabil keyword kot ime. Še bolj zabavno je, da si parser ne polomi zob brez kvotanja.


Kaj si mislil s tem, ne razumem najbolje?

Gost ::

Eno offtopic vprašanje:
V mysql-u si upaš imeti case sensitive ime stolpca? Če boš imel kdaj filesystem, ki loči med uppercase in lowercase, bo težava:
WHERE DATE >= '" .$date. "' AND DATE < '" .$date2. "'";


DATE != Date != date

Popravek: typos

Zgodovina sprememb…

  • spremenil: Gost ()

dolenc ::

Jst še zmer mislem da če boš preimenoval kolono v datum, bi select moral delat:D

Gost ::

dolenc je izjavil:

Jst še zmer mislem da če boš preimenoval kolono v datum, bi select moral delat:D


Glede na dokumentacijo to ni res:
http://dev.mysql.com/doc/refman/5.1/en/...

DATE je beseda, ki je sicer rezervirana, ampak je ni potrebno citirati, ker je bila preveč v uporabi v preteklosti.

Zgodovina sprememb…

  • spremenil: Gost ()

krho ::

jeryslo je izjavil:

krho je izjavil:


Kaj je to '2010/7/8' za en blesav format zapisa datuma? iso zapis iso... tako pri poizvedbi kot pri vpisu v bazo... Ker jaz pri zgornjem zapisu, ne vem ali gre za 8 julij ali 7 avgust...


Hmmm to sem tudi sam še malo razmišljal, bom verjetno spremenil da bo bolj uporabniku prijazno.

Vidim, da nisi dojel, kaj sem hotel povedat... iso zapis datuma je YYYY-MM-DD in kot takšnega MORAŠ podati, ko iščeš po bazi, ali vpisuješ vanjo.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net

jeryslo ::

Ne, sej to sem razumel, sem šel takoj gledati na ISO 8601, nisem razumel pa tistega prvega dela o tem:

krho je izjavil:


Bolj zabavno je to, da mu je pustil narediti stolpec kjer je uporabil keyword kot ime. Še bolj zabavno je, da si parser ne polomi zob brez kvotanja.

krho ::

Date je v večini baz rezervirana beseda, saj ponavadi obstaja funkcija s tem imenom.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net

jeryslo ::

Aha, ok tole je pa dobro vedit:)). Kako pa se potem običajno označuje stolpec z datumi, še posebej če bi rad imel angleško besedo?

AndrejS ::

date je rezervirana beseda.... če imaš ime stolpca pač napišeš `date`.

V mysql-u si upaš imeti case sensitive ime stolpca? Če boš imel kdaj filesystem, ki loči med uppercase in lowercase, bo težava:


Tu file sistem res nima veze !

Gost ::

AndrejS, imaš prav glede velikosti črk. Za imena tabel velja ta problematika in ne za stolpce:
http://cosminswiki.com/index.php/MySQL_...

krho ::

last_vist_date, deleted_date, blabla_date
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net

keworkian ::

Kaj pa ce bi zajebal celoten sistem in uporabil UNIX_TIMESTAMP() in se ti ne bo treba drkat z nobenim gnilim datumom? Ker pol je se ena fuŁ neat funkcija, ki se klice FROM_UNIXTIME(), zakaj bi se matral z formatom datuma ce lahko to naredis bolj simpelj.
Obscenities in B-Flat

krho ::

ker se mi ne da vedno kverija pisat s fromunixtime.. pa ker je unixtime omejen na 2038
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[python] project euler problem

Oddelek: Programiranje
151258 (810) Spura
»

PHP problem

Oddelek: Šola
101060 (628) technolog
»

Beleženje udeležbe v prometu (strani: 1 2 )

Oddelek: Loža
5810773 (7904) SeMiNeSanja
»

c# problem z lokalno spremenljivko

Oddelek: Programiranje
7745 (621) KernelPanic
»

SQL CNVERT; konvertanje datuma

Oddelek: Programiranje
141444 (1250) frudi

Več podobnih tem