Copiar fila en MySQL

8/11/2011

Un útil tip para copiar una fila en MySQL en una nueva:

**Este es un ejemplo, hay que ajustarlo a lo que necesiten, como al parámetro Where.

INSERT INTO tabla (`campo_1`,`campo_2`) (SELECT `campo_1`,`campo_2` FROM tabla WHERE id=X)

No Comments

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

Buscar campos duplicados en MySQL

6/06/2011

Un tip de como buscar registros duplicados en una base de datos MySQL:

SELECT id, campo, count( campo ) AS count
FROM tabla
GROUP BY campo
HAVING count >1
ORDER BY id ASC

Solo hay que adaptar el código a lo que se necesite! En este ejemplo “campo” es el field en el que buscaremos duplicados.

1 Comment

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

Deprecated: Function set_magic_quotes_runtime() is deprecated en EzPdf class

8/06/2010

Este error me hizo dar una buena búsqueda antes de resolverlo, cuando tenemos php 5.3.x instalado en nuestros servidores y usamos la clase ezclass para PDF de R&Os

El error que nos muestra puede ser muy similar a:

Cabe mencionar, que los números de línea pueden variar y, el la ubicación del script la escribí como “…”

Deprecated: Function set_magic_quotes_runtime() is deprecated in /…/class.pdf.php on line 2856
Deprecated: Function set_magic_quotes_runtime() is deprecated in /…/class.pdf.php on line 2858
Deprecated: Function set_magic_quotes_runtime() is deprecated in /…/class.pdf.php on line 2641
Deprecated: Function set_magic_quotes_runtime() is deprecated in /…/class.pdf.php on line 2653

Además de un:

Deprecated: Assigning the return value of new by reference is deprecated in /…/pdf.php on line X

Esto se arregla muy rápido y hay que saber el porque del problema, se trata tan solo de una función depreciada en PHP 5, que se iba a mantener en funcionamiento hasta ultima versión, solo que no mas en la 6, ósea, llegando a PHP 6 ya no se podrá utilizar esta función.

Lo que debemos hacer es simple, abrimos el fichero de la clase (class.pdf.php) en el editor de nuestra preferencia y eliminamos todas las líneas que contengan esto:

set_magic_quotes_runtime(0);

Por ultimo, solo es necesario editar nuestro script donde ejecutamos la creación del PDF y cambiamos de esto:

$pdf =& new Cezpdf(‘letter’,'portrait’);

Por esto:

$pdf = new Cezpdf(‘letter’,'portrait’);

Lo único que hicimos es quitar ese ampersand (&) antes del new, ya que esto solo se permite en PHP 4.

3 Comments

Copiar la estructura de una tabla MySQL en una tabla nueva

11/03/2010

Si deseas copiar la esctructura de una tabla dentro de una base de datos MySQL, peor no los datos, solo necesitas ejecutar una linea en un query. La Sintaxis es:

CREATE TABLE tabla_copia LIKE tabla_original;

Eso es todo, obtendremos los mismo campos que en la “tabla original” en la “tabla_copia” en un sencillo paso.

1 Comment

Buscar en un campo separado por comas en MySQL

2/03/2010

Debido a un desarrollo en el que actualmente trabajo, me tope con esto que resulto ser muy sencillo de hacer, pero no esta tan documentado como se espera. Que pasa si tienes un campo con cadenas de texto o enteros separados por coma, como categorías, nombres etc.

Un ejemplo practico seria,  el campo “cats” tiene un contenido como ’2,11,10,1,16′, si usamos el tradicional LIKE:

SELECT * FROM tabla WHERE cats LIKE '1';

Se podría pensar que esta solución es adecuada pero no es así, ya que nos devolvera:

cats:

  • 11
  • 10
  • 1
  • 16

Para lograr obtener solo el ’1′ y no todos los números que contengan el ’1′ se debe utilizar esta sintaxis:

SELECT * FROM tabla WHERE FIND_IN_SET('1', cats)

En el ejemplo práctico ‘tabla’ es el nombre de la tabla en la que queremos buscar y ‘cats’ el nombre del campo.

5 Comments

Reparar tabla corrupta en MySQL

4/02/2010

Lo único que hay que hacer, es un query mediante PHP, en  la consola interactiva o vía PhpMyAdmin conteniendo lo siguiente:

REPAIR TABLE mytablacorrupta;

Con esto, MySQL reparara los problemas que tengamos.

No Comments

Dividir resultado de query MySQL por bloques con PHP

22/12/2009

Qué pasa si tienes un query que te arrojara cierta cantidad de filas, y necesitas dividirlas en bloques de “X” cantidad. Esto, en mi caso lo utilice para hacer un slider con JQuery, para se precisos con el plugin de Cycle.

Se asume que ya tienen establecida una conexión con la base de datos, así que solo pondré el código desde el query. Una vez que lean lo siguiente, será muy fácil entenderlo, si tienen dudas por favor comenten.

$query = "SELECT * FROM tabla";
$result = mysql_query($query, $con) or die(mysql_error());
// aqui decidimos el tamaño de los bloques
$divider = 4;

if($result){
	$i=0;
	while ($row = mysql_fetch_assoc($result)) {
		if($i%$divider==0){
//aquí escribimos el principio de el bloque
			echo('<div>'."\n");
			echo('<ul>'."\n");
		}
		$i++;
//aquí escribimos el codigo que queremos repetir por la cantidad de elementos dentro del bloque, en este caso 4
		echo("<li>".strtoupper($row['name'])."</li>\n");

		if($i%$divider==0){
//aquí escribimos el cierre de el bloque
			echo('</ul>'."\n");
			echo('</div>'."\n");
		}
	}
}

Como se puede leer, el ejemplo es muy sencillo, pero nos puede servir para infinidad de cosas.

No Comments