Comparar dos columnas en MySQL

29/06/2011

Como hacer, si es necesario comparar el contenido de dos tablas en MySQL. Por ejemplo:

Tabla1 -> productos_codigo

Tabla2 -> productos_codigo

Aquí ejecutaremos una sentencia MySQL que hará el trabajo por nosotros! tomando como ejemplo campos y las tablas arriba descritas.

SELECT Tabla1.productos_codigo AS productos_no_encontrado
FROM Tabla1
LEFT JOIN Tabla2 ON Tabla1.productos_codigo = Tabla2.productos_codigo
WHERE Tabla2.productos_codigo IS NULL

Esto nos mostrara solamente los “Productos” que no existen en la Tabla 2 y si en la Tabla 1.

Happy Coding!

No Comments

Montar directorio compartido vía Samba en Ubuntu

8/06/2011

Para montar por ejemplo, el directorio compartido “Compartido” en un servidor o workstation con Linux, solo hay que ejecutar el siguiente comando:

mount -t smbfs -o username=usuario,password=password //192.168.1.1/Compartido /media/samba

El directorio destino debera existir en el sistema que desea montar el compartido. Hay que poner el IP que corresponde y el nombre del directorio compartido, en este caso el IP será 192.168.1.1 y el share: “Compartido”. El destino para el montado, en este ejemplo sera /media/samba

1 Comment

RSync ignorar errores de I/O

6/06/2011

Para hacer un sync entre dos directorios e ignorar los errores de I/O con Rsync, solo hay que agregar la opcion:

–ignore-errors

Ejemplo:

rsync -av –no-whole-file –ignore-errors /dirA/ /DirB

No Comments

Eliminar “Mail Recuperado” de Gmail en Apple Mail

9/02/2011

Hoy por la mañana al abrir Apple Mail me dí cuenta que tenia “En mi Mac” un directorio de mensajes recuperados de Gmail, el cual contenía unas 30 veces un mail que intente enviar el día anterior. El correo no salio como debería, ya que excedí el limite de MB que GMail permite, pero esto, por alguna razón desato el problema en mi apple mail ya que no paraba de “reciclar” ese correo y por lo mismo, no podía recibir mis nuevos correos.

La solución es muy simple!

  1. Primero den botón derecho en el buzón de Gmail para poner Offline la cuenta.
  2. Eliminen el directorio de Mensajes recuperados.
  3. Abran su terminal desde Aplicaciones -> Utilidades -> Terminal**
  4. Naveguen hasta /Users/usuario/Library/Mail/IMAP-user@imap.gmail.com/.OfflineCache
  5. Eliminen todo el contenido de este ultimo directorio, OJO, los contenidos no el directorio en si.
  6. Command + q para cerrar Mail
  7. Vuelvan a abrir Mail

**Debido a que .OfflineCache es un directorio oculto, tenemos que eliminar su contenido desde la terminal y ejecutar lo siguiente:

cd /Users/usuario/Library/Mail/IMAP-correo@imap.gmail.com/.OfflineCache

rm -Rf *

8 Comments

Como cambiar el orden de todos los contactos de Otulook a “nombre apellido”

26/01/2011

Que pasa si tienes 1000 contactos en Outlook y se almacenan como “Pérez Pedro” y necesitas que sea “Pedro Pérez” o viceversa… imagina la cantidad de trabajo que representa cambiar manualmente el campo “Almacenar como” de 1,000 contactos, o de 10,000, incluso hacerlo para 200 ya es una labor titánica.

Para solucionar esto, existe un script que podemos correr desde el editor de Visual Basic incluido en Office, para abrir el editor VB, solo presionamos “alt+f11″.

//Comienza Script VB

Public Sub ChangeFileAs()
Dim objOL As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim objContact As Outlook.ContactItem
Dim objItems As Outlook.Items
Dim objContactsFolder As Outlook.MAPIFolder
Dim obj As Object
Dim strFirstName As String
Dim strLastName As String
Dim strFileAs As String

On Error Resume Next

Set objOL = CreateObject("Outlook.Application")
Set objNS = objOL.GetNamespace("MAPI")
Set objContactsFolder = objNS.GetDefaultFolder(olFolderContacts)
Set objItems = objContactsFolder.Items

For Each obj In objItems
'Test for contact and not distribution list
If obj.Class = olContact Then
Set objContact = obj

With objContact
strFirstName = .FirstName
strLastName = .LastName
strFileAs = strFirstName & " " & strLastName
.FileAs = strFileAs

.Save
End With
End If

Err.Clear
Next

Set objOL = Nothing
Set objNS = Nothing
Set obj = Nothing
Set objContact = Nothing
Set objItems = Nothing
Set objContactsFolder = Nothing
End Sub

//Termina Script VB

Después, solo corremos el script que acabamos de copiar y listo!

1 Comment

Ejecutar script, tarea o trabajo mediante SSH, salir de sesion y al regresar, ver el progreso del proceso

17/11/2010

Si tenemos un script, una app o algún comando que lleve mucho tiempo de ejecución, normalmente deberíamos dejar nuestra ventana SSH abierta durante todo el proceso, ya sea mediante putty, una terminal en Linux o una consola en Mac OS X. Con este sencillo tip ya no será así, podemos cerrar la aplicación SSH que estemos utilizando y después de un tiempo, regresar al servidor y ver el avance.

En mi caso personal, tengo que correr un script que tarda un par de horas en terminar su ejecución, por lo que generalmente lo hacia directamente en el servidor, precisamente para evitar este problema de no saber que hace después de apagar mi equipo. Ya no mas! ahora usando “screen” puedo revisar el proceso desde cualquier terminal en cualquier momento!

Primero, entramos al servidor con ssh

$ ssh usuario@servidor

Ahora tecleamos screen, esto la primera ves que lo ejecutamos, nosa sacara una ventana con informacion, solo damos enter:

$ screen

Después, ya dentro de “screen”, ejecutamos el script o lo que queramos hacer, en este ejemplo haremos un apt update y upgrade.

$ apt-get update & apt-get upgrade -y

Para probar que este funcionando, salimos del terminal, putty o consola y despues regresamos con ssh:

$ ssh usuario@servidor

Ahora, para recuperar el proceso con screen, tecleamos screen -r

$ screen -r

Y veremos el proceso en cuestión… ahora, no he encontrado una forma más elegante de cerrar screen una ves terminado el proceso, mas que con un killall, si alguien lo sabe, no estaria mal que lo compartiera.

$ killall screen

Con esto cerramos screen y regresamos al modo normal de la sesión ssh.

2 Comments

Crear particiones de más de 2TB en Ubuntu Linux

4/11/2010

Para los que ya tenemos discos o mejor dicho, arreglos de discos mayores a 2TB seguramente nos hemos dado cuenta de mala forma que fdisk no permite la creación de particiones mayores a 2TB.

Al crear una partición de 4 TB por ejemplo, fdisk nos regresa una partición de tan solo 2TB, la solución es simple, pero la logre encontrar después de un rato de investigación, se debe instalar “parted” y con el crear las particiones.

$ apt-get update && apt-get install parted

Después se invoca de la siguiente forma (donde sdb es nuestro disco duro a particionar):

$ parted /dev/sdb

Ahora estamos dentro de la interfaz dinámica de parted:

GNU Parted 2.2

Using /dev/sdx

Welcome to GNU Parted!
Type ‘help’ to view a list of commands.

(parted)

Ahora crearemos el disklabel:



# mklabel gpt

Después con esta instrucción armamos una partición de 4TB

# mkpart primary 1 4000G



Salvamos los cambios:


# quit



Ahora, crearemos el sistema de ficheros, o “formato” en el ejemplo usaremos EXT4



$ mkfs.ext4 /dev/sdb1



Por último, crearemos una etiqueta, ya que en lo personal prefiero montar unidades por medio de etiquetas en lugar de dispositivos, por ejemplo en lugar de usar /dev/sdbX, me gusta LABEL=”disco1″, ya que si por alguna razón, no conectamos los discos en el mismo orden todo se vuelve un caos.

$ e2label /dev/sdb1 nombrededisco



Eso es todo!

No Comments

Error: La CPU NTVDM ha encontrado una instrucción no permitida

20/07/2010

Este error es molesto y muy simple de reparar, lo unico que se tiene que hacer es, en “opciones de carpeta” y permitir ver archivos ocultos y archivos de sistema.

Ahora vayan a:

C:\WINDOWS\repair

Copiar los archivos: Autoexec.nt y Config.nt despues los pegan en:

C:\WINDOWS\system32

29 Comments

Obtener numerador y denominador desde una tabla en MySQL con PHP (numero / total)

8/07/2010

En realidad no sé ni como poner titulo a este tema, pero les explico un poco lo que tenia que hacer para que encuentren este ejemplo útil en lo que necesiten.
Existe una tabla en la que almaceno registros que se enlazan a otra tabla por medio de un campo, ejemplo:

T1
a_id, a_referencia_t2_id, a_contenido

T2
b_id, b_algomas

Con esto, debía listar todas las filas de T1 y en obtener la el numerador del registro, es decir, 2 / 3 (el segundo registro de los tres disponibles con la misma referencia de la T2).

Obtener el denominador es sencillo:

$total_num = ceil(mysql_num_rows(mysql_query(“SELECT a_id FROM t1 WHERE a_referencia_t2_id=”.$row_t1['b_id'].”")));

Ahora, lo complicado, es generar ese “índice” para obtener el numerador, esto lo hice dentro de un while($row_t1=mysql_fetch_assoc($query_t1)), entonces la ejecución del código se hace por cada fila obtenida:

mysql_query(“set @a_id = ””);
mysql_query(“set @num  = 1;”);
$sql_num = ‘
SELECT
a_id as id_num,
a_referencia_t2_id,
@num := if(@a_id = a_referencia_t2_id, @num + 1, 1) as row_number,
@a_id:= a_referencia_t2_id as dummy
FROM `t1`
WHERE a_referencia_t2_id=’.$row_t1['a_referencia_t2_id'];
$query_num=mysql_query($sql_num) or die(mysql_error());
while($row_num=mysql_fetch_assoc($query_num)) {
if($row_num['id_num']==$row_t1['a_id']) {
$num=$row_num['row_number'];
}
}

Con esto, obtenemos el resultado deseado (Ej.: 4 / 8):

echo $num.” / “.$total_num

Espero que les sea útil!
Part ot this code came from: http://www.xaprb.com/blog/2006/12/02/how-to-number-rows-in-mysql/

No Comments

Convertir de cantidad a importe con letra en pesos mediante PHP

29/06/2010

Necesitaba una función que pudiera traducir una cantidad dada con centavos a el total con letra, es decir escrito, para un sistema de facturación con PHP, encontré una función excelente en BLASTEN.com y me tome la libertad de moverle un poquito para hacer que la salida fuera exactamente como la necesitaba, es decir, incluyendo “X PESOS xx/100 M.N.”

Todo el crédito es para la gente de Blasten, pero le puse un poquito mas de sabor para quienes me leen y lo puedan utilizar con mayor facilidad.

Importante: La función por el momento solo acepta 2 decimales y el formato del numero tiene que ser xxx.xx, así que pueden utilizar number_format() para limpiar la variable antes de pasarla por la función.

Para utilizarlo, solo descarguen el código, péguenlo en su script o hagan un include con la ruta al fichero que pueden descargar aquí, de cualquier forma, lo único necesario es utilizar:

echo num2letras($var);

No queda mas que desearles happy coding!

num2letras en php

13 Comments