ОсновноеRadiotalkПользовательское
Программирование
6   •   Посмотреть все темы

mysql сортировка

 

3363
Влад @4ih-pqh
В общем бяда такая. Уже написал кучу разного кода и голова не варит.
Пишу одну штукенцию и там пользователю надо добавлять или сортировать по дате. естесно сделано по-человечески в формате даты например 06-12-16, нужно именно так и точка 😀 .

далее мы считаем часы, но вот незадача...если бы дата была в дефолтном формате мускуля, то нет проблем, а как быть с моими значениями? Нужно отобразить часы за месяц, а не за всё время

SELECT SUM(`Hours`) FROM `data` WHERE `Name` LIKE 'vladlen'

Пришёл к такому варианту и понятное дело он не рабочий по причине....да, формата даты.

SELECT SUM(`Hours`) FROM `data` WHERE `Name` LIKE 'vladlen' and MONTH(`Date_user`) = MONTH(NOW()) AND YEAR(`Date_user`) = YEAR(NOW())


прошу поделиться своими мозгами)

20090
Dimitry @Dimitry
Ничего не понятно что ты творишь)

1555
Алексей @TheDark
4ih-pqh, я вот тоже не очень понял, о чем ты говоришь.
Ты дату как в БД хранишь? Типа в VARCHAR в виде 'DD-MM-YY'?
Если бы было DATETIME ('YYYY-MM-DD HH:MM:SS'), то выборку записей за текущий месяц можно сделать так:
$date_begin = date('Y-m-d H:i:s', mktime(0, 0, 0, date('m'), '01', date('Y')));
$date_end = date('Y-m-d H:i:s', mktime(0, 0, 0, date('m')+1, '01', date('Y')));

$query = $db->query("SELECT SUM(`Hours`) FROM `data` WHERE `Name` LIKE 'vladlen' AND Date_user>='" . $date_begin . "' AND Date_user<'" . $date_end . "'");

А уж потом можно преобразовать полученную дату из БД в виде 'YYYY-MM-DD HH:MM:SS' в нужный тебе формат 'DD-MM-YY' и вывести пользователю. Хранить в таком виде - это застрелиться.
Если, конечно, я хоть немного понял о чем речь.

Отредактировано TheDark - 15.12.2016
3363
Влад @4ih-pqh
TheDark пишет:

4ih-pqh, я вот тоже не очень понял, о чем ты говоришь.
Ты дату как в БД хранишь? Типа в VARCHAR в виде 'DD-MM-YY'?
Если бы было DATETIME ('YYYY-MM-DD HH:MM:SS'), то выборку записей за текущий месяц можно сделать так:
$date_begin = date('Y-m-d H:i:s', mktime(0, 0, 0, date('m'), '01', date('Y')));
$date_end = date('Y-m-d H:i:s', mktime(0, 0, 0, date('m')+1, '01', date('Y')));

$query = $db->query("SELECT SUM(`Hours`) FROM `data` WHERE `Name` LIKE 'vladlen' AND Date_user>='" . $date_begin . "' AND Date_user<'" . $date_end . "'");

А уж потом можно преобразовать полученную дату из БД в виде 'YYYY-MM-DD HH:MM:SS' в нужный тебе формат 'DD-MM-YY' и вывести пользователю. Хранить в таком виде - это застрелиться.
Если, конечно, я хоть немного понял о чем речь.

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

20090
Dimitry @Dimitry
Да пусть вносит в любом формате, а потом переведи в нужный тебе.

3363
Влад @4ih-pqh
Dimitry пишет:

Да пусть вносит в любом формате, а потом переведи в нужный тебе.

то есть через php?

1555
Алексей @TheDark
4ih-pqh, да. Пример функции:
function toCorrect($user_date) {
$date = explode('-', $user_date);
$correct_date = date('Y-m-d', mktime(0, 0, 0, $date[1], $date[0], $date[2]));
return $correct_date;
}

$user_date = '06-12-16'; // то, что ввел пользователь
print toCorrect($user_date); // 2016-12-06

На выходе будет корректное YYYY-MM-DD, которое можно хранить в DATE (если время не нужно)

Отредактировано TheDark - 16.12.2016
20090
Dimitry @Dimitry
В данном случае можно и 20 подставить)))
А вообще strtotime() сама понимает почти все варианты форматов, а далее можно конвертировать.

Возможно и такое сработает:
echo date("Y-m-d",strtotime("xx-xx-xx"));

1555
Алексей @TheDark
Dimitry, можно) но mktime все равно выдаст дату. Неправильную, конечно, но ошибки не будет.
Твой пример возвращает 1970-01-01, если данные ошибочны. В любом случае дополнительные проверки нужны.

Отредактировано TheDark - 16.12.2016
3363
Влад @4ih-pqh
что-то я совсем потерял понимание происходящего)

1555
Алексей @TheDark
4ih-pqh, это, конечно, уже оффтоп, но как же ты сервис какой-то пилишь, если теряешься уже в вопросах даты?)

3363
Влад @4ih-pqh
TheDark пишет:

4ih-pqh, это, конечно, уже оффтоп, но как же ты сервис какой-то пилишь, если теряешься уже в вопросах даты?)

пилю и пилю....единственная проблема возникла с этим делом....не просто даты...если бы всё по формату было, то это одно, а тут другое...ну я попробую по вашим ответам поиграться с датами)