query na dati s between

7 отговора 477 прегледа
#1

query na dati s between

Zdravejte, otnovo se izvinqvam, 4e pi6a na latinica, v momenta ne pi6a ot moeto pc i na tova nqma kirilica . V mysql-a imam naredeni periodi ot dati ne6to ot roda na :

01/01/2001
02/01/2001
03/01/2001
04/01/2001
05/01/2001
06/01/2001
...
...
...
24/12/2005
25/12/2005

Ne6to takova . Sled tova s text polence iskam da izvadq vsi4ki dati mejdu 05/01/2001 i 30/06/2001 primerno -->

$query="SELECT * FROM periods WHERE (data BETWEEN '$data_na4alo' AND '$data_krai')";
$result=mysql_query($query, $connection);

Pri koeto rezultatite se vadqt rezultatite sravneni samo po syotvetniq den ot datata ot vsi4ki godini ( kakto e v primera 6te izkara ne6to ot roda na ot 05/01/2001 do 30/01/2001 + ot 05/02/2001 do 30/02/2001 + ot 05/03/2001 do 30/03/2001 ... i taka natatyk ). Abe ob6to vzeto vadi vsi4ko kydeto nameri pyrvite 2 4isla da sa mejdu 05 i 30. Malko dylgi4yk stana posta, no se opitvam da go obqsnq kakto trqbva. Popro4etoh v neta i naistina komandata between mi se stori prakti4na, no ne sravnqva simvolite sled "/". Ta zna4i vyprosa mi e kak da izvadq zapisite ot mysql-a mejdu dadenite 2 dati , kato zapisite v bazata sa za vseki den.

Отговор
в отговор на Budah #2

Re: Ами то затова си има тип DATE

Като пазиш датите в CHAR или VARCHAR мъчи се сега

salle.online.bg/sig
Отговор
в отговор на salle #3

Re: Ами то затова си има тип DATE

Що за отговор "мъчи се". Като не можеш да помогнеш недей да пишеш глупави мнения.

Редактирано от Budah на

Отговор
в отговор на Budah #4

Re: Ами то затова си има тип DATE

Ако използваш DATE твоят BETWEEN оператор ще работи чудесно без нужда от допълнителни глупости.

А в твоя случай трябва първо да форматираш датите от твоите стрингове до DATE и чак тогава ще сработи при което естествено няма да може да използва индекс т.е. баааааавно

Най-доброто до което можеш да достигнеш е комбинация от STR_TO_DATE() и BETWEEN

Изобщо най-добре е да си преправиш таблицата.


Ако пък чак толкова те мързи да погледнеш в ръководството

.. WHERE STR_TO_DATE(data, '%d/%m/%Y') BETWEEN ....

И не се оплаквай, че е бавно. Виж по-горе защо.

salle.online.bg/sig
Отговор
в отговор на Budah #5

Правиш си една аритметика

Правиш си една аритметика и от полето с дата отделяш само тази част, която те интересува (ако е повече от едно число - съобразяваш старшинството).
След това така получения резултат го проверяваш да бъде между желаните ти.
За примерът ти, между стринговете
'04'..'31' са всички стрингове (и никои други):
'05000000'
'30999999'
Впрочем, за какво ти в бетуина да ти сравнява след флеша (може да си форматираш стринга в заявката без флеш)?
И защо питаш за дати, като са стрингове?

Отговор
#6

Re: query na dati s between

> за фунцията StrToDate имам впредвид функция която да ти връща датата в тип Integer

Ама ти не разбра ли, че той си пази датите като стрингове във формат
ден/месец/година ?

salle.online.bg/sig
Отговор
в отговор на salle #7

Май човекът се интересува само от деня

Май човекът се интересува само от деня - аз така го разбрах - да селектира записите, в които денят е между две числа (от 5 до 30) за всеки месец.

Отговор
в отговор на NikB #8

Re: Май човекът се интересува само от деня

"Ta zna4i vyprosa mi e kak da izvadq zapisite ot mysql-a mejdu dadenite 2 dati "

Много относително го е казал ама то няма значение, мисля че е същото... btw2date = btw2time

Отговор