code_maker
24.06.2014 - 20:54
Есть таблица table с полями имя документа doc_name, путь к документу path и датой документа date
делаю запрос к базе -
db$=mysql_query(SELECT * FROM table ORDER BY 'date' DESC)
row$=mysql_fetch_assoc(db$)
foreach ($row as r$) {
echo r$
}
Я новичок и код набирал по памяти для скорости, но суть понятна - он выведет список отсортированный в обратном порядке по полю data или по ключу data массива row.
Как сделать чтобы каждый раз когда год документа уменьшался на единицу, цикл выводил тег. Таким образом было бы что-то вроде этого:
2014
Документ дата
документ дата
2013
документ дата
документ дата
Дата в поле date записана в формате YYYY-MM-DD
Может нужен еще один цикл?
$year = '';
foreach ($row as r$) {
if($year != r$['date_year']){
echo 'тэг';
}
$year = r$['date_year'];
echo r$['doc_name'];
}
r$['date_year'] - год. Как отделить его от даты, думаю решиш.
_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.
code_maker
24.06.2014 - 21:43
kjdgh
спасибо! сижу, осмысливаю.
получается что мне в SQL запросе надо в поле date выбрать только YYYY, тогда r$['date_year']=table['date']
Но тогда не очень понятно как мне вывести всю дату.
Сделать повторный запрос к SQL, сделать массив и... куда его выводить? если с другим именем, то как соотнести с массивом r$?
задать if (r$['doc_name']=new$['doc_name'])
{echo r$['doc_name'] new$['data']}
так чтоли?
просто от полной даты отрывать год. есть функции для работы со строками. оторвите 4 символа от даты и это будет год.
Немогу написать код, так как с телефона неудобно.
_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.
code_maker
24.06.2014 - 22:09
kjdghааа, понял! спасибо, я найду. сначала даже не ясно было что искать.
и вообще, храни дату в форме метки time(). легче выводить.
_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.
Valick
24.06.2014 - 23:44
Цитата |
оторвите 4 символа от даты |
дурной совет
Цитата |
храни дату в форме метки time() |
Valick
24.06.2014 - 23:46
code_maker, кто вас научил обрабатывать результат запроса с помощью foreach?
Цитата |
Может нужен еще один цикл? |
нет не нужен
просто необходимо в цикле вывода результата из БД (а это обычно while)
установить переменную которая будет сравнивать год из базы со значением в этой переменной, и в случае если эти значения не равны, то выводить год на экран и перезаписывать значение этой переменной на уже отображённое значение из БД.
Достаточно сумбурно объяснил, но сейчас после двух бутылок шампанского я на большее не способен. Если у вас не получиться реализовать то что я написал, то завтра постараюсь написать вам код (хотя может кто-то это сделает первее меня)
____
а вычленить в запросе двту можно с помощью YEAR(`date`)
_____________
Стимулятор ~yoomoney - 41001303250491
code_maker
25.06.2014 - 08:27
Valick
когда решал одну из задач по php, нашел несколько примеров с циклом foreach. С циклом while у меня не получалось, а с foreach все вышло. задача была перебрать массив и вывести элементы на экран.
лучше с while разобраться?
попробую пока с вычленением даты разобраться и циклом while.
$sql = mysql_query("SELECT *, YEAR(`date`) AS `year` FROM `table` ORDER BY `date` DESC");
if(mysql_num_rows($sql))
{
echo '<pre>';
while($row = mysql_fetch_assoc($sql))
{
print_r($row);
}
}
code_maker
25.06.2014 - 10:18
rooor
красивый код с while, спасибо!
у меня сейчас почему-то из поля date функция YEAR('date') да и любая другая MONTH, DAY выводят NULL. если просто echo $row['data'], то показывает дату. я уже и тип данных в sql на date сменил. все равно NULL. и UPDATE сделал, перезаписал данные даты. не понимаю что не так.
Valick
25.06.2014 - 10:48
Цитата |
у меня сейчас почему-то из поля date функция YEAR('date') да и любая другая MONTH, DAY выводят NULL |
так покажи как ты её выводишь-то)
в БД тип поля `date` точно DATE ?
_____________
Стимулятор ~yoomoney - 41001303250491
code_maker
25.06.2014 - 11:02
Valick
из phpmyadmin:
1 id_dom varchar(9) utf8_general_ci
2 doc_name varchar(200) utf8_general_ci
3 file_path varchar(100) utf8_general_ci
4 date date
делал уже и int(11).
Делаю чисто SQL-запрос в phpmyadmin:
SELECT YEAR('2011-06-12') выводит 2011 !
делаю SELECT YEAR('date') FROM table - выводит мне NULL для всех полей. Прямо в phpmyadmin.
То есть до php дело вообще не дошло. Дату делал update уже, значение менял - не помогает.
Ищу уже несколько часов похожую проблему - не нашел. У всех все нормально выводит.
Если сделать SELECT date FROM table - выводит даты списочком.
code_maker
25.06.2014 - 11:16
я нашел ошибку!!!!!!!
УРАААА)))
если написать 'date' то это будет строка или как-то так и SELECT 'date' даст вывод date.
Поэтому когда делаешь YEAR(date) надо писать без кавычек. Поэтому он и выводил NULL. Ведь он считал date не набором цифр, а словом.
Цитата |
делаю SELECT YEAR('date') FROM table - выводит мне NULL |
кавычки обратные надо ставить, а не прямые. Прямые - для значений, обратные - для таблиц и колонок
SELECT YEAR(`date`) FROM `table`
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.