|

Outer joins en SQL

Hace días que llevo pensando en explicar cómo hacer un outer join en SQL (MySQL y Oracle), y hoy he encontrado unos diagramas que explican los diferentes tipos de joins que podemos hacer (MySQL).

El outer join se usa cuando queremos que obtener todos los campos de una tabla que cumplen una condición y los campos de otra tabla que coinciden con los de la primera tabla.

outerjoin.png

Imaginamos que tenemos una tabla de palabras en inglés y una tabla de traduciones:

Tabla : palabras
id / palabra
1 / bird
2 / flower
3 / sky
4 / tree
Tabla: traducciones
id / traduccion / idioma
1 / pájaro     / es
3 / cielo      / es

Se trata de tener la tabla de palabras y sus correspondientes traducciones (en este caso solo lo he hecho para español, pero se podrían incluir registros para otros idiomas). Si nos fijamos veremos que un join normal no lo podremos hacer porque si igualamos el id de palabras y traducciones habrá registros que no se mostrarán en la tabla de palabras porque no existen sus correspondientes en la tabla de traducciones. Por ello deberemos ejecutar las siguientes instrucciones en MySQL y Oracle:

/* MySQL */
SELECT *
FROM palabras
LEFT OUTER JOIN traducciones
ON palabras.id = traducciones.id
/* Oracle */
SELECT palabra, traduccion
FROM palabras, traducciones
WHERE palabras.id = traducciones.id (+)

Echadle un vistazo al resto de representaciones gráficas de los joins porque son muy aclaratorias.

A Visual Explanation of SQL Joins

| |

Laboratorio: modificar urls para CodeIgniter con mod_rewrite

codeigniter.pngCodeIgniter es uno de los frameworks PHP de los que más se habla últimamente, a mí personalmente me gusta bastante, aunque hay algunas cosas que no son como me gustaría.

Una de ellas es la estructura de las URLs, las URLs siguen el formato:

http://dominio/controlador/metodo/parametro/parametro/...

El controlador es la clase que se encarga de hacer las operaciones y el método es el método de la clase que realiza una función concreta.

Por ejemplo si tenemos una tienda online, podemos tener un controlador para productos y un método que sea editar, con el que se podrá modificar las características del producto. La url sería la siguiente:

http://tienda.com/articulo/editar/cafetera

Con esta url podemos editar un artículo llamado cafetera y además es bastante entendible. Pero, ¿qué pasa si queremos mostrar el artículo cafetera?, pues que la url debería ser la siguiente:

http://tienda.com/articulo/ver/cafetera

Pero lo de ver no queda demasiado bien y queda mejor si es directamente:

http://tienda.com/articulo/cafetera

El problema nos lo encontramos cuando queremos usar una URL que no indique el método y si un parámetro. Si no usamos ni método ni parámetro, CodeIgniter toma por defecto el método index, pero si no usamos método y si parámetro, CodeIgniter no es capaz de saber que lo que mandamos es un parámetro, por lo que hay que usar el Apache para que siga la estructura de CodeIgniter.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^articulo/(.+)$ index.php/articulo/ver/$1 [L]
RewriteCond $1 !^(index\.php|favicon\.ico)
RewriteRule ^(.*)$ index.php/$1 [L]

Hay que tener en cuenta que este ejemplo es válido únicamente si solo se va a usar siempre dos segmentos en la url, uno para el controlador y otro para el parámetro.

La segunda parte y el uso de index.php es debido a que CodeIgniter usa este script para gestionar toda la aplicación, y para que no aparezca, debemos redireccionarlo todo a index.php, menos los ficheros que existen como el favicon, el robot.txt, etc.

Regex Coach: ayuda con expresiones regulares

Regex Coach es una aplicación para Windows que nos ayuda a probar y a aprender expresiones regulares (compatibles con Perl).
Nos ayuda a comprobar nuestras regexps mostrando las coincidencias que hay con una cadena de texto que podemos añadir, además de mostrarnos que partes del texto corresponden a una parte específica de la regexp o a una arbitraria.
regexcoach.png
Entre otras características nos encontramos con una simulación de split, un árbol (poco logrado) con la representación gráfica de la expresión regular y descripción de la expresión regular en inglés, entre otras cosas.
Regex Coach

links for 2007-10-19

Bitacoras.com va por 4 años y los que faltan

Ayer José Luis Perdomo nos comentaba sobre los cuatro años que lleva Bitacoras.com siendo una parte importante para la blogosfera hispana. Nos habló del pasado, del presente y del futuro, un futuro cercano que nos va a traer novedades.
Bitacoras.com siempre ha sido algo importante para Sentido Web, y no solo porque JL formara parte del equipo que lanzó Bitacoras.com, sino por lo que implica para los blogs en la comunidad hispana. Además ahora es algo más importante porque Perdomo ha contado conmigo para esta nueva etapa.
bitacoras.png
Tengo el placer de trabajar con Raúl Ordónez, David Martínez y Daniel Mota, cada uno en su casa y el Skype en la de todos, puro teletrabajo, para que luego las empresas digan que no se puede… se puede y muy bien.
La nueva Bitacoras.com estará llena de cosas, espero que os gusten tanto como a nosotros.

Errores al desarrollar con Ajax

Buena serie de consejos para evitar cometer errores cuando desarrollamos con Ajax.

  • Ajax es una herramienta, no un juguete: en muchos casos el uso de Ajax es totalmente innecesario.
  • No se lleva bien con el botón back del navegador: este botón es necesario para la usabilidad y javascript no se lleva muy bien con él.
  • No avisar de que se realiza una acción: cuando hago click en alguna zona de la página y se genera una acción, se debería avisar de ello para que el usuario sepa que se están actualizando datos.
  • Dejar a los usuarios offline de lado: que cada vez haya más gente con conexión a internet, no quita que nos debamos olvidar de la gente que apenas hace uso de ella, por ello es necesario pensar que las páginas en Ajax muestran datos de forma dinámica, y que no se producirá el refresco de datos si el usuario está offline.
  • Hacer esperar al usuario: la ‘A’ de Ajax es de asíncrono, no es necesario que el usuario haga algo para obtener datos, nos podemos adelantar a sus acciones e ir realizando peticiones para obtener esos datos y que el usuario no tenga que esperar la respuesta.
  • Enviar información sensible de forma visible: en muchas ocasiones enviamos al navegador los mismos datos que se reciben en la aplicación, la diferencia es que la aplicación filtra esos datos y muestra los que convienen. En el navegador, aunque no se muestren todos, si se envían se podrán ver.
  • Asumir que Ajax es una única plataforma: hay que testear correctamente las aplicaciones Ajax para que se puedan ver en las distintas plataformas que permiten Ajax, por ejemplo los distintos navegadores.
  • Múltiples usuarios: si tu aplicación la usan varios usuarios a la vez, ten en cuenta que puede haber problemas al actualizar datos por parte de unos y visualizarlos por parte de otros.
  • Excesivo trabajo para el navegador: a veces el uso de aplicaciones Ajax hace que el navegador tenga que realizar muchas tareas, lo cual puede no ser bueno para el rendimiento.
  • Olvidarse de aquellos que no tienen Javascript: según las estadísticas son un 11%, por ello siempre hay que ofrecer una alternativa no Ajax.
  • No usar enlaces: al refrescarse el contenido dinámicamente, nos olvidamos de los enlaces para poder acceder a esa información.
  • Salirse de lo común en la usabilidad: al permitirnos realizar operaciones poco habituales, nos encontramos con la circunstancia de que esperemos que el usuario realice una acción que este no espera que se tenga que hacer así. La gente suele estar acostumbrada a realizar siempre lo mismo.
  • No realizar cambios en cascada: nos olvidamos de que cuando cambia una parte de la página deben cambiar a su vez otras partes relacionadas.

Yo a parte añadiría algo que se suele decir con frecuencia pero que nunca está mal volver a repetirlo: el que asíncrono implica que si se lanzan varias peticiones al servidor, el orden de llegada no tiene que ser el mismo que el orden de envío, esto es muy importante a la hora de actualizar datos.

Ajax Mistakes

Lista de recursos Javascript

Una gran lista de recursos que podemos necesitar para nuestros desarrollos o para aprender cosas nuevas sobre Javascript.

Tutoriales

Colección de scripts

Frameworks y librerías

Técnicas

Referencias

Herramientas

70+ JavaScript Resources for Every Web Developer

Vía / dzone

links for 2007-10-17