Опять mysql со своими приколами.

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Опять mysql со своими приколами.

Непрочитанное сообщение dikens3 » 2007-07-02 12:23:44

Есть два запроса в которых диапазон дат разный:

Код: Выделить всё

mysql> SELECT count(1) FROM log WHERE ( dst_email LIKE '%user@domain.%' ) AND (`date-time` BETWEEN '2007-06-30' AND '2007-07-01' + INTERVAL 1 DAY) AND `size` IS NULL;
+----------+
| count(1) |
+----------+
|      178 |
+----------+
1 row in set (0.05 sec)

mysql> SELECT count(1) FROM log WHERE ( dst_email LIKE '%user@domain.%' ) AND (`date-time` BETWEEN '2007-06-31' AND '2007-06-31' + INTERVAL 1 DAY) AND `size` IS NULL;
+----------+
| count(1) |
+----------+
|      178 |
+----------+
1 row in set (0.06 sec)
В первом запросе выборка с 30 июня по 1 июля(включительно, т.е. до 2 июля)
Во втором на 31 июня(такой даты нет в базе) и выборка отображает с 30 по 1. В чём прикол?
Разбираясь дальше нашёл вот что:

Код: Выделить всё

select '2007-06-31' + INTERVAL 1 DAY;
+-------------------------------+
| '2007-06-31' + INTERVAL 1 DAY |
+-------------------------------+
| 2007-07-02                    |
+-------------------------------+
1 row in set (0.00 sec)
Т.е. если к несуществующей дате прибавить 1 день, то mysql делает дату существующей(его об этом просят?) и прибавляет 1 день.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Непрочитанное сообщение hizel » 2007-07-02 13:23:51

может из за того что в июне 30 дней =/

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Непрочитанное сообщение dikens3 » 2007-07-02 13:27:41

hizel писал(а):может из за того что в июне 30 дней =/
Я знаю сколько в июне дней.
Вопрос в том, что нафига делать за меня работу, которую я не просил? и тем самым у меня неправильно отрабатывает запрос. Мать его так этот mysql.
Сидел ведь на postgresql, не знал проблем никогда. Полез... :-(

Даже больше скажу, что не mysql этим нужно заниматься. К примеру у меня есть в базе данных какой-то текст. Например:

ПРЕВЕД!!!

И он его не найдет, т.к. в его словаре нет такого слова?
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35418
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-07-02 14:08:30

неплохо бы проверять данные перед тем как отдавать их запросу.
в т.ч. и корректность данных.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Непрочитанное сообщение dikens3 » 2007-07-02 14:19:05

lissyara писал(а):неплохо бы проверять данные перед тем как отдавать их запросу.
в т.ч. и корректность данных.
ПРЕВЕД корректно? А если не найдёт?
Дней в месяце может быть 28-31. Лень мне свою проверку писать из-за того что MYSQL тупой.
Видать так и придётся.

И ещё, нужно для внутреннего пользования и учитывать что пользователь будет пытаться стать хакером и введёт дату 2100 год и месяц 16 не имеет смысла, ибо ему mysql должен будет показать пустые поля.(даты такой в базе нет !!! ) И кстати, почему можно ввести 2100 год (не пробовал, но думаю можно), а 31 июня нельзя? Может завтра в июне будет 31 день?

P.S. Дату и т.п. пользователь выбирает. JavaScript я не знаю и находу проверить не могу(т.е. скрыть некоторые даты после выбора месяца.)
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Непрочитанное сообщение lexy » 2007-07-02 15:25:05

dikens3 писал(а):
lissyara писал(а):неплохо бы проверять данные перед тем как отдавать их запросу.
в т.ч. и корректность данных.
ПРЕВЕД корректно? А если не найдёт?
Дней в месяце может быть 28-31. Лень мне свою проверку писать из-за того что MYSQL тупой.
Видать так и придётся.

И ещё, нужно для внутреннего пользования и учитывать что пользователь будет пытаться стать хакером и введёт дату 2100 год и месяц 16 не имеет смысла, ибо ему mysql должен будет показать пустые поля.(даты такой в базе нет !!! ) И кстати, почему можно ввести 2100 год (не пробовал, но думаю можно), а 31 июня нельзя? Может завтра в июне будет 31 день?

P.S. Дату и т.п. пользователь выбирает. JavaScript я не знаю и находу проверить не могу(т.е. скрыть некоторые даты после выбора месяца.)
проверяй на стороне сервера тогда данные, а проще - сделай селектор дат (о! у меня ж есть..... сча, вспомню в каком проекте и выложу)

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Непрочитанное сообщение lexy » 2007-07-02 16:00:07

держи вот!

Код: Выделить всё

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
<head>

  <meta http-equiv="Content-Type" content="text/html; charset=koi-8r" />
  <title>Итфвюнепке - Прюрхжк</title>


  <link href="/manage/manage.css" rel="stylesheet" type="text/css" />

</head>


<body>

<select name="day" id="day">
</select>

<select name="month" id="month" onchange="setDays(this.value)">
<option value="1">Январь</option>
<option value="2">Феврфль</option>
<option value="3">Март</option>
<option value="4">Апрель</option>
<option value="5">Май</option>
<option value="6">Июнь</option>

<option value="7">Июль</option>
<option value="8">Август</option>
<option value="9">Сентябрь</option>
<option value="10">Октябрь</option>
<option value="11">Ноябрь</option>
<option value="12">Декабрь</option>
</select>

<select name="year" id="year" onchange="setDays(month.value)">
<option value="2006">2006</option>

<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
<option value="2015">2015</option>

</select>

<script language="javascript1.1">
<!--//
function setDays(month){
var days_count=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
odS=od.selectedIndex
if(month==2) {dcn=oy.value%4?28:29 }else{ dcn=days_count[month-1]}
while (od.length> 0) {
od.remove(0);
} for(i=1;i<=dcn;i++){
od.options[i]= new Option(i,i,false,false)
}
od.selectedIndex=((od.length-1)<=odS)?od.length-1:odS;
}
var oy=document.getElementById('year');
var om=document.getElementById('month');
var od=document.getElementById('day');
<?
//initialize date selector by PHP
$mf=($date)?date('n',$date):date('n');
echo("om.value=$mf\r\n");
$yf=($date)?date('Y',$date):date('Y');
echo("oy.value=$yf; setDays(om.value);\r\n");
$df=($date)?date('j',$date):date('j');
echo("od.value=$df\r\n");
?>
//-->
</script>
</body>
</html

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Непрочитанное сообщение dikens3 » 2007-07-02 16:24:56

Хм.. Ну спасибо что-ли. Буду пробовать.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35418
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-07-02 22:33:21

Код: Выделить всё

$mf=($date)?date('n',$date):date('n'); 
ненавижу такой синтаксис... :)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Непрочитанное сообщение lexy » 2007-07-03 6:29:48

lissyara писал(а): ненавижу такой синтаксис... :)
ты еще других моих конструкций не видел, я еще, стыдно признаться :oops: , и вот такое использую

Код: Выделить всё

<?=$variable?>
и, не поверишь, работает!!!! ))))))))))))))

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35418
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-07-03 7:55:17

и это видел...
=======
я вообще непонимаю этой моды на короткий синтаксис...
код нечитаем становится...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Непрочитанное сообщение lexy » 2007-07-03 8:54:34

смотря для чего пишешь - если для обучалова - то да, для быстроты кодинга всеж меньше символов - быстрее написал.

++++++++++++++++

я как то вот по такому коду и учился, ковырял другие скрипты, допиливал под себя. Я потому WYSIWYG вебредактор и искал, что сначала пишу представление визуальное, а потом вписываю в него динамику, быстро и стабильно получается. А выгонять HTML код из PHP при помощи echo это изврат я считаю. PHP не для этого создавался а для интеграции динамической генерации и визуального представления. Эхами можно в перле выгнать ))))) хотя у него там тож есть пакет для шаблонов страниц вроде. )))))), кста, PHP1 был написан на перле ))))

сорри за оф-топ

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35418
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-07-03 9:02:39

у меня вся страница в конце собирается в переменную, и её содержимое выводится через эхо...
Когда-то - да - кусочками код выводил :)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35418
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-07-03 9:03:34

кстати - вру, надо утчнять - помоему у меня она в двух вариантах - либо на сжатие уходит, и оттуда как бинарная идёт юзеру, либо чеерз эхо - если сжатие не поддерживается.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Непрочитанное сообщение dikens3 » 2007-07-03 11:47:01

Я тут подумал, хорошо ещё что каждый месяц начинается с 1-но числа. А то вообще ппц.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Непрочитанное сообщение lexy » 2007-07-03 12:06:03

dikens3 писал(а):Я тут подумал, хорошо ещё что каждый месяц начинается с 1-но числа. А то вообще ппц.
ИМХО ты зря на MySQL гонишь! Это всего лишь СУБД, а не date|time validator :D

ЗЫ. Вот так, доблестным флудом заслужил себе еще одну лычку! :lol:

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Непрочитанное сообщение dikens3 » 2007-07-03 12:59:52

Дык ведь он валидатором и работает, хотя не просят и работает при этом неправильно.
Я уже задолбался запросы подгонять под индексы.(И индексы под запросы)

P.S. Проблему с датой на 1 день решил добавлением ещё 1 поля (date и вносим CURDATE()) в mysql (избыточно конечно, но данных не много)
И изменением запросов к этому полю на дату без интервала, т.е. стало
WHERE `date` = '2007-06-31'
И всё работает.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Непрочитанное сообщение lexy » 2007-07-04 11:12:23

dikens3 писал(а):Дык ведь он валидатором и работает, хотя не просят и работает при этом неправильно.
Я уже задолбался запросы подгонять под индексы.(И индексы под запросы)
в одной програмерской никсовой фирме у программеров висел плакат "Долой оптимизацию" :lol:
ИМХО майскл сам оптимизирует запрос и решает, а нужно ли использовать индексы или нет
dikens3 писал(а):P.S. Проблему с датой на 1 день решил добавлением ещё 1 поля (date и вносим CURDATE()) в mysql (избыточно конечно, но данных не много)
И изменением запросов к этому полю на дату без интервала, т.е. стало
WHERE `date` = '2007-06-31'
И всё работает.

Это уже смахивает на анекдот про суровых сибирских лесорубов и японскую пилораму:
...запихнули в нее лом, хррр сказала машина и сдохла, "АААА бля" сказали суровые сибирские лесорубы!

анекдот о том, что пользовательские данные должны проверятся перед обработкой :D

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Непрочитанное сообщение dikens3 » 2007-07-04 11:18:52

анекдот о том, что пользовательские данные должны проверятся перед обработкой
Согласен, с Mysql анекдот, только вот выхода пока нет. База должна нормально отрабатывать мои данные, нафига писать проверку?
MySQL кривой. Буду что-то новое делать, больше с ним не свяжусь.
А оптимизатор есть наверное у всех, только у Mysql он гавно полное. По другому сказать нельзя.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Непрочитанное сообщение lexy » 2007-07-04 11:48:27

ну хз.... 5 лет мускел пользую (мощно, с большими таблицами) и ниччо..... все устраивает
идеальных вещей не бывает.

Sw%00p
проходил мимо

Re: Опять mysql со своими приколами.

Непрочитанное сообщение Sw%00p » 2007-07-24 7:58:07

dikens3 всётаки тупой не мускул а ты

Код: Выделить всё

select '2007-06-31' + INTERVAL 1 DAY;
+-------------------------------+
| '2007-06-31' + INTERVAL 1 DAY |
+-------------------------------+
| 2007-07-02                    |
+-------------------------------+
1 row in set (0.00 sec)
ты задавался вопросом почему датав мускуле пишется именно так 2007-07-02 (сначало год месяц и день)
и думаешь мускул не знает что в июне 30 дней а не 31 и не должен же он тебе сделать дату 30 и потом прибавить 1 чтобы получилось 07-01 он видит неправильную дату 06-31 исправляет её до следующей правильной даты 07-01 и прибавляет 1

и совет задай этот вопрос создателям мускула ))))) мускул это тебе не то что хочу ввожу это расчитанно на то что если вдруг по ошибке ты так введёшь то он тебе правильно сформирует вывод

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Опять mysql со своими приколами.

Непрочитанное сообщение dikens3 » 2007-07-27 17:01:23

и совет задай этот вопрос создателям мускула ))))) мускул это тебе не то что хочу ввожу это расчитанно на то что если вдруг по ошибке ты так введёшь то он тебе правильно сформирует вывод
Ещё раз повторю для особо одарённых.
Когда я говорю ПРЕВЕД - это означает ПРИВЕТ и плевать мне на правильно это по мнению создателей mysql или нет. А так же куда они там и что подгоняют, а также на то, есть ли у них такое слово в словаре вообще. (Аналог количества дней в июне, июле и т.п.)

Тема закрыта.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35418
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Опять mysql со своими приколами.

Непрочитанное сообщение Alex Keda » 2007-07-27 18:35:29

я конечно извиняюсь, что лезу в закрытую тему, но всё же - может над писать запросы без ошибок? :)))
===========
как женатая жизнь, лучше поделись :)
Убей их всех! Бог потом рассортирует...