All posts in MySQL

Amb aquesta funció de quatre línies de codi, aconseguirem girar una data Timestamp, data + hora, tant si ens arriba en format MySQL yyyy-mm-dd hh:ii:ss com si ens arriba de pantalla en format europeu dd/mm/yyyy hh:ii:ss


/**
* Girem una data/hora en format MySQL a *EUR i viceversa
*
* @param string $timestamp
* @return string
*/
function giraTimestamp($data)
{
/**
* Mirem que la cadena compleixi amb els requisits de :
* entre 1 i 4 posicions decimals
* seguit d'un separador vàlid
* seguit d'entre 1 i 2 posicions decimals
* seguit d'un separador vàlid
* seguit d'entre 1 i 4 posicions decimals
* seguit d'un espai
* seguit d'entre 1 i 2 posicions decimals
* seguit d'un separador :
* seguit d'entre 1 i 2 posicions decimals
* seguit d'un separador : o no, doncs els segons no són obligatoris
* seguit d'entre 0 i 2 posicions decimals
*
* guardant-nos les xifres d'any, mes i dia i la data complerta
*/
if (preg_match('/(d{1,4})[-/.](d{1,2})[-/.](d{1,4})s(d{1,2}:d{1,2}:?d{0,2})/', $data, $jData))
{
/**
* Esborrem la primera possició de l'array resultant que és la cadena
* que s'ha parsejat.
*/
array_shift($jData);

/**
* Extraiem de l'array l'hora:minut:segon
*/
$jHora = array_splice($jData, 3);

/**
* Si la primera xifra te 4 posicions, vol dir que venim de
* MySQL, i representarem la data girada amb / com a separador
* En cas contrari, vol dir que venim de pantalla, i el
* separador serà l'standard de MySQL.
*/
if (strlen($jData[0]) == 4)
{
$separador = '/';
}
else
{
$separador = '-';
}

/**
* Retornem la data
*
* girem l'array que conté any,mes,dia o dia,mes,any
* la convertim a una cadena separant cada element pel separador calculat
* afegim espai blanc i l'hora complerta
*/
$ret = implode($separador, array_reverse($jData)) . ' ' . $jHora[0];

return $ret;
}
}

Per als camps de tipus date, que no tenen l’hora, la cadena de parseig serà:


/(d{1,4})[-/.](d{1,2})[-/.](d{1,4})/

logo_large

A Corretgé.com hem decidit implementar el gestor de projectes dotProject 2.1.2 i adaptar-lo a les nostres necessitats.
El primer que farem serà que el llistat de companyies del dotProject es correspongui amb la relació de clients de l’AbanQ i així evitar haver d’entrar les fitxes a les dues aplicacions:
Prèvia còpia de seguretat de les dades, arrenquem el MySQL i emprem la base de dades on tenim el dotProject i esborrem la taula companies:
drop table companies

I procedim a la creació de la vista basada en les dades de client de l’AbanQ que tenim en aquest cas a la base de dades crtfaclux. A la relació de clients d’AbanQ també ha d’existir la nostra pròpia empresa, que identificarem com de tipus 6, Interna, que la detectem pel NIF:
create view companies as
select c.codcliente as company_id,
0 as company_module,
convert(c.nombre USING utf8) as company_name,
c.telefono1 as company_phone1,
c.telefono2 as company_phone2,
c.fax as company_fax,
convert(d.direccion USING utf8) as company_address1,
convert(d.provincia USING utf8) as company_address2,
convert(d.ciudad USING utf8) as company_city,
d.codpais as company_state,
d.codpostal as company_zip,
substring_index(c.email, '@', -1) as company_primary_url,
1 as company_owner,
convert(c.nombrecomercial USING utf8) as company_description,
CASE c.cifnif
when 'B17803586' then 6
else 1
end as company_type,
c.email as company_email,
convert(c.contacto USING utf8) as company_custom
from crtfaclux.clientes c
left join crtfaclux.dirclientes d on c.codcliente = d.codcliente and d.domfacturacion = 1

Si accedim al llistat de companyies de dotProject trobarem integrades tots els nostres clients, assigants com a owner de la companyia l’administrador del dotProject. Aquest camp no es pot canviar. Si es necessita canviar dades, el que haurem de fer és integrar-les de manera periòdica i no pas crear una vista.

oracle-compra-sun

En Toni Hermoso informa d’una notícia Bomba: Oracle comprarà SUN per 7.400 milions de dollars, uns 5.700 milions d’Euros (els USA empren el que s’anomena Short Scale per a quantificiar un bil·lió).

Pagaran 9,5 USD per acció, preu de cotització de SUN a l’agost del 2008, molt per sobre dels 6,5 actuals i el doble dels 4,75 que cotitzaven abans del 17 de març, data en que es van fer públics els rumors de que IBM volia comprar SUN per 7.000 milions d’USD. SUN va trobar insuficient l’oferta d’IBM i van trencar unes converses molt avançades el 6 d’abril.L’aposta d’IBM era força interessant per al món Open Source: Assegurava la seva aposta per Java com a llenguatge inter-plataforma de propòsit general i mantenia desenvolupament de MySQL, com demostra la creació de l’IBMSB2i Storage Engine per a MySQL de l’AS/400.

L’aposta d’Oracle potser va més enrutada en assegurar-se poder servir als seus clients sol·lucions integrades amb maquinari, de fet històricament Oracle i SUN havien anat del braçet.

Possiblement també controlar els gestors de bases de dades que suporten SAP i potser incorporar a Oracle algunes de les funcionalitats de MySQL i viceversa. Seria fantàstic la creació d’un Oci Storage Engine per a MySQL ;-)

Una bona manera d’esborrar registres per clau duplicada en MySQL és creant un índex UNIQUE amb la instrucció IGNORE.
ALTER IGNORE TABLE `taula` ADD UNIQUE KEY (`campClau`);
Si s’especifica IGNORE, només la primera fila és manté. Les altres files en conflicte són esborrades. Valors incorrectes seran truncats al valor més proper que esdevingui un valor acceptable.

Més informació al manual ALTER TABLE de MySQL

Per omissió mysqldump genera un únic INSERT amb tots els registres de la taula. Això és interessant si el que necessitem és optimitzar el procés de backup i restore, però ens limita les opcions de depuració.

Per a obtenir un backup d’una base de dades MySQL amb un INSERT per cada registre, afegirem l’opció
--skip-extended-insert
I amb un KDiff o qualsevol altre comparador d’arxius, podrem depurar els canvis en una base de dades registre a registre.

Afegint –routines com a paràmetre de mysqldump, aconseguirem que el volcat de dades de la base de dades triada inclogui les funcions pròpies.

Si únicament volem obtenir un BackUp d’aquestes rutines (procediments i funcions), executarem:
mysqldump -u root -p --no-create-info --no-data --routines BaseDades > BaseDades.rutines.sql

A MySQL (provat amb versió 5.0.51) podem especificar com a valor per omissió d’un camp data/hora de tipus TIMESTAMP la data del sistema:

`datModif` timestamp NOT NULL default CURRENT_TIMESTAMP

Si a més a més també volem tenir la data de modificació del registre, fariem:

`datModif` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP

Per a que adopti el valor per omissió, indicarem NULL com a valor a l’hora de fer l’INSERT.

La limitació de MySQL en MyISAM, almenys, és que només podem definir aquesta característica a un únic camp de la taula.

LAMP és l’acrònim de Linux, Apache, MySQL i PHP. És com es coneix el sistema de servidor d’aplicacions web més estès arreu d’InterNet.
La instal·lació és molt senzilla, només cal executar aquestes instruccions:
sudo apt-get install apache2
sudo apt-get install mysql-server
sudo apt-get install php5 php5-mysql php5-gd
si fem http://localhost visualitzarem la plana situada a /var/www/