lunes, 23 de abril de 2018

MySQL - Devolver resultados de una consulta de un group by separados por comas

Buen dia a todos,
Para devolver el resultado de una consulta que con una tabla cruzada, y esta información que se muestre por un separador, en este caso una coma, se puede usar la siguiente instrucción.

Ejemplo:

Tabla: pais
 id|descripcion
 1      Colombia
 2      Argentina
 3      Ecuador

Tabla: gustos
id|gusto
1   cafe
2   futbol
3   musica


Tabla crizada: xref_pais_gusto
pais_id|gusto_id
 1          1
 1           2
  2          2   
  2          3

Resultado ejemplo

Detalle: resultado
pais|gustos
Colombia   cafe,futbol
Argentina   futbol,musica

SQL

SET GLOBAL group_concat_max_len=4096;
SELECT pais_
         GROUP_CONCAT(DISTINCT gusto) AS gustos
FROM pais AS p
INNER JOIN xref_pais_gusto AS pg ON pg.pais = p.id
INNER JOIN gustos AS g ON g.id = pg.gusto_id
GROUP BY pais;

Nota: se debe cambiar el parametro group_concat_max_len, ya que por defecto solo devuelve 1024, por campo concatenado.

Espero les sirva.

Saludos






jueves, 7 de mayo de 2015

Instalación de PhalconPHP en Debian

Debido a las bondades que encontré en este Framework de PHP, en cuanto a rendimiento, decidí instalarlo en mi servidor Debian para hacer pruebas y usarlo.
En este momento no existe un paquete oficial actualizado . Asi que decidí hacer mis intentos y logré instalarlo con los siguientes pasos:

Características
Debian 7
PHP 5.4.39
A instalar Phalcon 2, tambien me funcionó para la versión 1.3.4.

Empecemos
Nota: ejecutar estos pasos en modo super usuario

Paso  1: Instalar los componentes necesarios 
apt-get update
apt-get install gcc make libpcre3-dev  php5-dev

Paso 2: Descargar el repositorio
git clone --depth=1 git://github.com/phalcon/cphalcon.git

Paso 3: Moverlo a la carpeta tmp
mv cphalcon /tmp

Paso 4: pararnos en la carpeta build
cd /tmp/cphalcon/build

Paso 5:Ejecutar el siguiente archivo
sh ./install

Paso 5.1: Si sale  el siguiente error
 not found2: ./install:
: not found16: ./install:
./install: 65: ./install: Syntax error: end of file unexpected (expecting "then")


o este

bad interpreter: No such file or directory

Paso 5.2: Hacer lo siguiente
touch install2
nano install2

Copiar el contenido de install y pegarlo en install2
Guardar

Paso 5.3
mv install2 install

Paso 5.4
sh ./install
Si sale el siguiente error "./install: line 64: phpize: command not found", es por que no ha instalado el componente "php5-dev".
En otro caso, debe aparecer lo siguiente:

Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking whether the C compiler works... yes
....

Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /usr/lib/php5/20100525/

Thanks for compiling Phalcon!
Build succeed: Please restart your web server to complete the installation


Paso 6: Habilitamos la extensión
cd /etc/php5/conf.d

Debería aparecer una lista de archivos así:
10-pdo.ini  20-gd.ini  20-mcrypt.ini  20-memcached.ini  20-mysqli.ini  20-mysql.ini

Paso 6.1: Creamos el archivo
touch 30-phalcon.ini
nano 30-phalcon.ini


Paso 6.2: Pegamos la siguiente información en el archivo 30-plancon.ini
extension=phalcon.so

Paso 6.3:Para evitar que se generen errores cuando ejecutemos una tarea por consola CLI "PHP Fatal error:  Class 'Phalcon\DI\FactoryDefault\CLI' not found" , movemos la extension a la carpeta cli de php,ejecutando el siguiente comando;

cd /etc/php5/apache2/conf.d && ls -lh
sudo mv ./30-phalcon.ini ../../mods-available/phalcon.ini
sudo ln -s ../../mods-available/phalcon.ini 30-phalcon.ini && cd ../../cli/conf.d/ && sudo ln -s ../../mods-available/phalcon.ini 30-phalcon.ini


Paso 6.4: Guardamos

Paso 7: Reiniciamos Apache
/etc/init.d/apache2 restart

Listo!

Ahora si hacemos un phpinfo, podemos ver la extensión instalada:

miércoles, 30 de octubre de 2013

Hacer count de registros separado por comas en mysql

Muchas veces necesitamos saber cuantas veces se repite un registro en una tabla, pero cuando este esta separado por comas con valores de otros registros, la cosa se complica un poco.

Hace poco necesitaba hacer justamente eso, graficar la información de una tabla, pero como esta información estaba separada por comas.

Que necesitaba mostrar y graficar?

Descripcion|Cantidad
 Colombia         10
 Argentina         5
 Ecuador           3  

Tabla maestra: tbl1
 id|descripcion
 1      Colombia
 2      Argentina
 3      Ecuador


Detalle: tbl2
id|data
1   1,3
2   3,2
3   1, 2
......

Buscando soluciones en la página de mysql, me encontré con esta joya

FIND_IN_SET
mysql> SELECT FIND_IN_SET('b','a,b,c,d'); 
Mas exactamente
mysql> SELECT FIND_IN_SET(valor buscado,campo tabla o string); 
 
La consulta final para mostrar la informacion es la siguiente: 

SELECT tbl1.descripcion,(SELECT COUNT(1) AS total
FROM tbl2
WHERE FIND_IN_SET(tbl1.id, tbl2.data) 
) AS total
FROM tbl1 


Voilá, eso fue todo.

Espero que esto le sirva a alguien.

lunes, 24 de octubre de 2011

Ganador absoluto "APPs para mejorar la relación con el Estado Colombiano"

En el pasado evento colombia 3.0 celebrado en la ciudad de Bogotá, se entregaron los premios a los ganadores del concurso "APPs para mejorar la relación con el Estado Colombiano", realizado por campos party y el ministerio de Tics.



El reto consistió en que los Campuseros piensen y diseñen a nivel conceptual una App para dispositivos móviles, web o para televisión digital terrestre enfocada en la provisión de un trámite o servicio del Estado Colombiano, en una o más de estas categorías:

1. Educación

2. Salud

3. Medio Ambiente

4. Servicios Públicos

5. Trabajo y Empleo

6. Seguridad y Convivencia

7. Cultura y Turismo

8. Transporte y Movilidad

9. Asuntos Sociales

10. Inclusión Digital

11. Vivienda

12. Derechos Humanos 



Los retos en cada una de las categorías obtuvieron diferentes premios:

· Premio a la mejor idea de APP entre las 12 Categorías: 7.500.000 Pesos Colombianos (3.000 euros)

· Premio a la mejor idea de APP por cada Categoría. Se premiará la mejor APP en cada una de las 12 Categorías con: Un teléfono Nokia N8.
 
La propuesta presentada por mi amigo Camilo Ramirez y yo, quedó como la mejor idea entre las 12 categorias del concurso con el proyecto "Sistema Móvil de Participación Ciudadana" un sistema de emergencia de acceso móvil, comunicado con todos los centros de emergencias del país.
 
 
 






martes, 6 de septiembre de 2011

Android ActionbarSherlock






Despues de haber probado el Greendroid, ahora he decidio probar esta libreria para programar en android de la cual he visto que se recominda debido a su compatibilidad en desarrollo con tablets con Honeycomb 3x.

Algunas caracteristicas de esta libreria son:

  • Creación de ActionBar
  • Tabs
  • Animacion
  • Listas
No tiene QuickAction como Greendroid, pero espero que en próximas versiones lo incluyan.
Todo esto retro-compatible con versiones anteriores a android 3x.

Por ahora me ha parecido genial, en un proximo post indicaré como instalarla ya que tiene sus trucos y no hay documentación clara al respecto.

Página de la libreria 



jueves, 21 de julio de 2011

Asus Eee pad Transformer



Por fin despues de una larga espera, me ha llegado mi Asus transformer, a primera impresión se ve hermosa, ya que las cajas son verderamente bonitas.



Una crítica para el la tablet, es el cable de carga muy corto y algo incomodo si se desea poner a cargar en una mesa si el enchufe esta muy abajo.

Después de navegarla e instalarle algunas aplicaciones esenciales para mi tales como el skype (facebook no disponible aun para tablet), se nota que es aparato realmente rápido  y su teclado es muy util fuera de que extiende la duración de la batería.

Por ahora estoy empalagado probando e instalando cosas, pero mi interés es poder hacer desarrollos para Android, los cuales estaré mostrando poco a poco.








miércoles, 6 de abril de 2011

[MySQL] Restar fechas con resultado en anios, meses y dias

Les comparto una función que realmente es importante para el calculo de fechas en Mysql.



CREATE FUNCTION `CalculoAnoMesDias`( fecha_ini datetime, fecha_fin datetime ) RETURNS char(128) CHARSET utf8
BEGIN
  /**
    resta de fechas y devuelve anio, mes, dia
    formato de ingreso yyyy-m-d
    SELECT CalculoAnoMesDias( '2011-1-05',now() );
  */
  DECLARE yy,mm,d0,dd BIGINT;
  SET yy = TIMESTAMPDIFF(YEAR,fecha_ini,fecha_fin); -- anios
  SET mm = TIMESTAMPDIFF(MONTH,fecha_ini,fecha_fin) MOD 12; -- meses
  SET d0 = TIMESTAMPDIFF(DAY,fecha_ini,fecha_fin);  -- dias
 

 -- calcular los dias
  IF yy > 0 ||  mm > 0 THEN
       IF (day(fecha_fin) >= day(fecha_ini)) THEN
         SET dd = TIMESTAMPDIFF(DAY,fecha_ini,fecha_fin) - TIMESTAMPDIFF(DAY,fecha_ini,CONCAT(YEAR(fecha_fin),'-',MONTH(fecha_fin),'-',day(fecha_ini)));
        ELSE
         SET dd = TIMESTAMPDIFF(DAY,fecha_ini,fecha_fin) - TIMESTAMPDIFF(DAY,fecha_ini,CONCAT(YEAR(DATE_SUB(fecha_fin,INTERVAL 1 MONTH)),'-',MONTH(DATE_SUB(fecha_fin,INTERVAL 1 MONTH)),'-',day(fecha_ini)));
        END IF;
  ELSE
     SET dd = d0;   
  END IF;
 
  RETURN CONCAT( yy, '  año(s) ,', mm, ' meses ,', dd, ' dias ');
END;