[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: where date_format
Страницы: 1, 2
BeerMan88
Здравствуйте!
Помогите составить запрос с date_format
у меня в таблице записаны даты и мне нужно вывести их по выбраному месяце
вывожу так!

$mount = trim(intval($_POST["mount"]));
$array_m = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
if(in_array($mount, $array_m)) {
$where = "WHERE DATE_FORMAT(date, '%c') = '".$mount."'";
}
$sql = mysql_query("SELECT * FROM `client` $where");

что я делаю не так?? помогите пожалуйста!
T1grOK
$mount = trim(intval($_POST["mount"]));

Глупость int уже не будет содержать никаких пробелов.
В POST вообще нужные данные приходят?
date в каком виде в базе хранится?


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
BeerMan88
int ето так!
да даные проходят!
date - 21-11-2013
AlmazDelDiablo
1. DATE_FORMAT возвращает номер месяца в строковом виде с ведущим нулём ('09', например), а, значит, сравнение с числом (9, в нашем случае), всегда вернёт false. Соот-но, нужно из числа месяца, после валидации, сделать строку с ведущим нулём, если это требуется (т.е. для месяцев 1—9).

2. Зачем вы валидируете месяцы через in_array()? Не проще ли сделать так:
$month = (int)$_POST["mount"]
if($month > 0 && $month <= 12)
{
// your code
}


_____________
Блог | VK | GitHub | Twitch
AlmazDelDiablo
Ан нет, с первым пунктом поторопился. Вот такой запрос:
SELECT * 
FROM `bk_chapters`
WHERE DATE_FORMAT( last_mod, '%m' ) = 9
Возвращает корректные данные. Так что использование числа вполне имеет место быть и без ведущий нулей.

_____________
Блог | VK | GitHub | Twitch
AlmazDelDiablo
Попробуйте вывести на экран содержимое переменной $month, затем $where, а потом — дату из базы. И посмотрите. Может, что-то поступает или обрабатывается не в том виде, в котором ожидалось.

_____________
Блог | VK | GitHub | Twitch
AlmazDelDiablo
И ещё. У вас же, если не отработает условие, $where будет не задана. Соответственно, вылезет предупреждение. Советую перед условием, задать $where = '';

_____________
Блог | VK | GitHub | Twitch
BeerMan88
в DATE_FORMAT()
%m выводит ( 01-12 ) а
%с выводит ( 1-12 )

BeerMan88
зделал на прямую так!

$sql = mysql_query("SELECT * FROM `client` WHERE DATE_FORMAT(date,'%c') = '11'");
while($row = mysql_fetch_array($sql)) {
echo '-'.$row["date"].'<br>';
}

и полюбому ничего не выводит! хотя в базе 3 даты с 11 месяцом
AlmazDelDiablo
Кстати, а у вас вывод ошибок включён? error_reporting(E_ALL) в начале скрипта. А то вдруг там скрывается монстр?

И выводите результат не через mysql_fetch_array, а mysql_fetch_assoc, так как первый вариант не создаёт ассоциативный массив (обе функции кликабельны, можете посмотреть документацию по ним; там есть на русском языке).


_____________
Блог | VK | GitHub | Twitch
BeerMan88
Error_Reporting(E_ALL & ~E_NOTICE);
и чисто!
AlmazDelDiablo
...а теперь попробуйте с функцией, которую я вам подсказал. И ещё, ~E_NOTICE — это лишнее, их тоже стоит видеть и исправлять.

_____________
Блог | VK | GitHub | Twitch
BeerMan88
зделал!
WHERE DATE_FORMAT(NOW(), '%c') = '".$month."'
BeerMan88
а нет не заканало((
AlmazDelDiablo
Эээ... Но ведь NOW() — это текущая дата. Она тут точно не в тему.

_____________
Блог | VK | GitHub | Twitch
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.