Точки в дате. (MySQL - timestamp)

Andrey_P

Guest
Точки в дате. (MySQL - timestamp)

Проблема простая, но как это сделать я не нашёл. В MySQL есть поле, где указывается время вставки сообщения в формате timestamp(6). Выводит что-то типа 021022, а мне нужно 02.10.22, а в идеале 22.10.02
Помогите пожалуйста.
 

.des.

Поставил пиво кому надо ;-)
PHP:
$str="021022";
$str=$str{4}.$str{5}.".".$str{2}.$str{3}.".".$str{0}.$str{1};
echo $str;
Переставляй как хочешь!
Ну вообщем принцип понятен?
 

.des.

Поставил пиво кому надо ;-)
абсолютно неверно!
ты где такую конструкцию нашел али сам придумал?
кстати на будущее все переменные в php начинаются с $

не занимайся фигней... тебе я и tony уже ответили на твой вопрос
 

tony2001

TeaM PHPClub
Андрей:
согласись, что функции в Си выполняются чуть быстрее, чем в ПХП ты руками делаешь извратный разбор даты.
отдай эту задачу на откуп MySQL, пускай он сам делает форматирование с помощью DATE_FORMAT()
 

Andrey_P

Guest
to .des.

дело в том, что данные из таблиы считываются в массив, статичной записи ремени там нету, вот и получается, что надо

$str=("%s" $array[date]);

а по DATE_FORMAT() я посмотрел только что, и ничего не понял: я же тип поля TIMESTAMP указываю, длину - 6, а вот куда там пихать DATE_FORMAT(DD:MM:YY)
 

tony2001

TeaM PHPClub
Андрей:
SELECT ..., DATE_FORMAT(date,'%y.%m.%d') FROM ....

>$str=("%s" $array[date]);
когда пишешь бред - объясняй что имел ввиду.
ЭТО - бред.
 

Andrey_P

Guest
Имел ввиду:

PHP:
		$query_all = mysql_query ("SELECT DISTINCT date FROM $server_table");
		echo mysql_error();
		while ($row_all = mysql_fetch_array($query_all)) { 
		echo mysql_error();
$str=("%s" $row_all[date]);
$str=$str{4}.$str{5}.".".$str{2}.$str{3}.".".$str{0}.$str{1}; 
echo $str;
}
 

.des.

Поставил пиво кому надо ;-)
Ну а какая разница массив или нет? только в случае с массивом надо указывать индекс и делать это правильно - индекс в кавычках $row_all['date']
PHP:
$str=$row_all['date']{4}.$row_all['date']{5}.".".$row_all['date']{2}.$row_all['date']{3}.".".$row_all['date']{0}.$row_all['date']{1}; 
echo $str."<br>";
НО ЭТО НЕПРАВИЛЬНЫЙ ПОДХОД! И ЛУЧШЕ ДЕЛАТЬ КАК СОВЕТОВАЛ tony
SELECT DISTINCT DATE_FORMAT(date,'%y.%m.%d') FROM $server_table;
и еще мой тебе совет не используй имена полей совпадающие с ключевыми, зарезервированными словами.
date переименуй лучше в data_zakaza например
 

RomikChef

Guest
des.
а ты уверен, что такая замороченая конструкция вообще сработает?
$row_all['date']{0}.

И - все хотел сказать - не злоупотребляй ты массивами из строк.
субстр работает на порядок быстрее.
 

.des.

Поставил пиво кому надо ;-)
а ты уверен, что такая замороченая конструкция вообще сработает?
$row_all['date']{0}.
Уверен и она отнюдь не заморочена.
И - все хотел сказать - не злоупотребляй ты массивами из строк.
субстр работает на порядок быстрее.
А вот это я не уверен... хотя и не утверждаю обратное.
если есть время проведи тесты.. если нет, то как будет я проведу сам.
Интересно следующее
Допустим есть строка:
PHP:
$str="sddddfogiueroiujgdiofhgeojpgd";
Доступ к отдельным символам ее будет быстрее через
PHP:
substr($str,$n,1)
или все таки
PHP:
$str{$n}
но второе все равно будет элегантнее.

насчет данной конкретной проблемы у Андрея_P согласен на 100% что решение тони лучше.. я это и отметил.
 

.des.

Поставил пиво кому надо ;-)
итак время я нашел - первое не на порядоке быстрее, а в 1.5 раза медленнее, чем второе.
вот текст теста
PHP:
// в тесте использовалась строка длиной 40000 символов 
//строка состояла из одних цифр.
// в этой строке 100 раз подсчитывалось и 
//суммировалоськоличество цифр 1.
// путем последовательного доступа к каждому символу и сравнения с 1.

include_once("_dima_timestat.php");
set_time_limit(60*30); // 30 минут

$size=strlen($tstring);
$x=0;
timestart("substr");
for($j=0;$j<100;$j++)
{
	for($i=0;$i<$size;$i++)
	{
		if(substr($tstring,$i,1)=="1")
		{
			$x++;
		}
	}
	echo $x."<br>";
}
timestop("substr");
$x=0;
timestart("idxarr");
for($j=0;$j<100;$j++)
{
	for($i=0;$i<$size;$i++)
	{
		if($tstring{$i}=="1")
		{
			$x++;
		}
	}
	echo $x."<br>";
}
timestop("idxarr");

timeprint();
?>
счетчик общее вpемя
substr ------ 34.7929
idxarr ------ 22.0568
вся пpогpамма pаботала 56.8707 сек
все внутpенные вызовы заняли 56.8498 сек (2 pаз)
остаток вpемени 0.0210 сек
Кстати результаты теста не удивительны... скорее всего механизм доступа к индексу сам php реализует через обыкновенные указатели, только с проверкой выхода за границы массива.
 

RomikChef

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