Gå til innhold

Anbefalte innlegg

Jeg har et felt i min mysql-database av typen DATETIME, jeg vil gjerne kunne formateret feltets output, som standard da er "0000-00-00 00:00:00", til f.eks "8 July 2007".

 

Jeg vet det er mulig, men har ikke klart å finne ut av hvor, noen som kan dytte meg i riktig retning?

Lenke til kommentar
Videoannonse
Annonse
Du kan også bruke programmeringsspråket ditt til å gjøre det om, enten til en Java Date eller ved bruk av PHP, whatever suits your needs.

9040010[/snapback]

Det vil kun føre til unødvendig mye kode.

Enten må han putte YYYY-MM-DD inn i PHP- eller Java-kode, der det må splittes og tolkes før det kan brukes til datoer. PHP vil vel bli noe ala dette her:

Klikk for å se/fjerne innholdet nedenfor
$date = '2003-04-23';
$date_array = explode('-', $date);
$new_date = date('[datoformatering]', mktime(0,0,0,$date_array[1], $date_array[2], $date_array[0]));

Eller så må han sende SELECT UNIX_TIMESTAMP(dato) til PHP eller Java. Også her blir det brukt flere funksjoner enn i DATE_FORMAT(). Først UNIX_TIMESTAMP() og så date().

Klikk for å se/fjerne innholdet nedenfor
$data = mysql_query("SELECT UNIX_TIMESTAMP('2003-04-23') AS unix_date");
$date = mysql_fetch_assoc($data);
$new_date = date('[datoformatering]', $date['unix_date']);

 

Kanskje jeg skal test litt ytelse i kveld. :hmm:

Edit: Jeg kunne bare ikke dy meg. Ytelsestest kommer her:

Klikk for å se/fjerne innholdet nedenfor
connect.php
PHP
<?php

$link mysql_connect('****''****''****') or die(mysql_error());

$db mysql_select_db('endre') or die(mysql_error());

?>

mysql_only.php

PHP
<?php

require('connect.php');

 

$dato_array = array();

 

$time_start microtime(true);

 

$get_data mysql_query("SELECT DATE_FORMAT(dato, '%e. %M %Y') AS new_date FROM teller");

while ($data mysql_fetch_assoc($get_data)) {

$dato_array[] = $data['new_date'];

}

 

$time_end microtime(true);

$time_used $time_end $time_start;

echo "Brukte {$time_used} sekunder (eller noe sånt)

<pre>";

print_r($dato_array);

echo '</pre>';

?>

php_only.php

PHP
<?php

require('connect.php');

 

$dato_array = array();

 

$time_start microtime(true);

 

$get_data mysql_query('SELECT dato FROM teller');

while ($data mysql_fetch_assoc($get_data)) {

$date_array explode('-'$data['dato']);

$dato_array[] = date('j. F Y'mktime(000$date_array[1], $date_array[2], $date_array[0]));

}

 

$time_end microtime(true);

$time_used $time_end $time_start;

echo "Brukte {$time_used} sekunder (eller noe sånt)

<pre>";

print_r($dato_array);

echo '</pre>';

?>

combo.php

PHP
<?php

require('connect.php');

 

$dato_array = array();

 

$time_start microtime(true);

 

$get_data mysql_query('SELECT UNIX_TIMESTAMP(dato) AS unix_time FROM teller');

while ($data mysql_fetch_assoc($get_data)) {

$dato_array[] = date('j. F Y'$data['unix_time']);

}

 

$time_end microtime(true);

$time_used $time_end $time_start;

echo "Brukte {$time_used} sekunder (eller noe sånt)

<pre>";

print_r($dato_array);

echo '</pre>';

?>

RESULTATER:

combo.php:
1. 0.149677
2. 0.042432
3. 0.032997
4. 0.035732

mysql_only.php:
1. 0.004956
2. 0.006374
3. 0.023619
4. 0.013931
5. 0.001812
6. 0.001848
7. 0.001770

php_only.php:
1. 0.138201
2. 0.072862
3. 0.079186
4. 0.071837
5. 0.093037
6. 0.109497
7. 0.076673

Jeg tror MySQL eller Linux cacher som et helvete, og jeg har prøvd å fylle cachen med andre spørringer mellom hver test, men det ser allikevel ut som at en god del blir cachet. Uansett kan det se ut som at rein MySQL er kjappest. Dette er kanskje pga. cachingen, men fakta er at det er den kjappeste måten i praksis, samtidig som den er den enkleste (bruker kun én funksjon).

Dataene som er brukt er en logg på 900 oppføringer, der datoen er lagret som DATETIME. Systemet som er brukt er Ubuntu Linux 7.04 med Apache 2.2.3, PHP 5.2.1 og MySQL 5.0.38.

Endret av endrebjorsvik
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...