Búsqueda


Categorías

C# [15]
PHP [6]
Zend [1]
FileMaker [1]
.NET [6]
CVS [3]
General [9]
Javascript [2]
Paypal [1]
.NET Compact Framework [3]
C++ [1]
mysql [4]
Linux [1]

Últimos post

Dónde guardar los archivos de configuración en ClickOnce
phpinfo: Valores en error_reporting
Notes about Zend Server and Zend Studio setup
What's new in C# 4
Resolving a 'sticky tag is not a branch' error
Resumen del CodeCamp
CodeCamp Tarragona 2009
Acerca de la calidad del código
ClickOnce en Linux
Programando en PHP (y con CVS) en Visual Studio 2008

Sindicación

RSS 0.90
RSS 1.0
RSS 2.0
Atom 0.3

Ordenar con MySQL (II)

ctg | 15 Mayo, 2007 22:47

En el anterior post, puse unos ejemplos de cómo ordenar valores del tipo (+5.00, +7.50, -1.50...)

Pues bien, resulta que no es del todo correcto utilizar ORDER BY CAST (campo AS SIGNED).

Según he estado leyendo en algunos foros (gracias a Ed), y como siempre, después de que alguien se quejase diciendo que los valores no estaban ordenados, lo mejor en estos casos es utilizar la siguiente forma:

SELECT * FROM tabla WHERE cláusula ORDER BY 'campo'+0

Increible... pero funciona... ahora me voy a leer otra vez la documentación para saber exactamente el significado del '+0' ... bueno mejor otro día

Publicado en mysql . Comentario: (0). Retroenlaces:(0). Enlace

Ordenar con MySQL

ctg | 04 Mayo, 2007 22:50

Hoy, realizando un trabajo en MySQL me he encontrado con un problema. El objetivo era ordenar un simple campo de texto. La cuestión estaba en el contenido de los campos. La tabla contenía los datos sobre dioptrías con los siguientes valores: -10.00, -9.50…0.00, +0.50, -+1.00, etc. Únicamente se desea ordenar las dioptrías de mayor a menor. Cuando he visto los valores, he recordado que ORDER BY no funcionaba como se cree.

Para ordenar este tipo de valores, es necesario utilizas CAST…AS SIGNED

SELECT * FROM `table` ORDER BY `fieldname` CAST AS SIGNED ASC

Publicado en mysql . Comentario: (0). Retroenlaces:(0). Enlace

INNER JOIN y COUNT

ctg | 22 Febrero, 2006 23:45

De vez en cuando, me toca realizar alguna consulta SQL un poco especial. Para no tener que echar mano al libro de Paul Dubois, MySql, o visitar alguna web dónde pueda “refrescar” mis conocimientos sobre SQL, dejo aquí algunos apuntes que pueden ser útiles.

Ejemplo 1)

Con la siguiente consulta se genera una tabla dónde aparecen todos los campos de la tabla jss_products y también los campos que tengan concordancia en la cláusula ON de la tabla jss_products_tree. Esta consulta se realiza para obtener una tabla con todos los productos (jss_products) y sus id de sección (jss_products_tree)

SELECT * FROM jss_products INNER JOIN jss_products_tree ON jss_products.productid = jss_products_tree.productid

Ejemplo 2)

Las tabla jss_products_tree sólo contiene el Id de la sección y no su nombre. Este nombre se encuentra en la tabla jss_sections. Por lo tanto, para realizar una tabla en la que se encuentre el nombre de la sección, se debe utilizar la siguiente consulta

SELECT * FROM (jss_products INNER JOIN jss_products_tree ON jss_products.productid = jss_products_tree.productid)INNER JOIN jss_sections ON jss_sections.sectionId = jss_products_tree.sectionid

Recordar que INNER JOIN muestra las líneas que contengan al menos un registro de la tabla que hayamos escrito a la derecha.

Para no repetir los campos (y evitar confusiones) en vez de utilizar * para seleccionar todos los campos, colocaremos los nombres de los campos que queremos consultar. La sentencia quedará más larga, pero la tabla mucho más sencilla.

SELECT jss_products.productId, jss_products.code, jss_products.name, jss_products.description, jss_products_tree.sectionId, jss_sections.title FROM (jss_products INNER JOIN jss_products_tree ON jss_products.productid = jss_products_tree.productid)
INNER JOIN jss_sections ON jss_sections.sectionId = jss_products_tree.sectionid

Si queremos saber el id del producto, su id de sección y el nombre de la sección:

SELECT jss_products.productId, jss_sections.sectionid, jss_sections.title FROM
(jss_products INNER JOIN jss_products_tree ON jss_products.productid = jss_products_tree.productid)
INNER JOIN jss_sections ON jss_sections.sectionId = jss_products_tree.sectionid

Y normalmente, en un buscador, se muestra el nombre de la sección y entre paréntesis, el número de artículos. Para conseguir el número de artículos utilizamos el operador COUNT(*). Al utilizar este operador, es necesario también utilizar GROUP BY.

SELECT count(*) as totalfound, jss_sections.sectionid, jss_sections.title FROM (jss_products INNER JOIN jss_products_tree ON jss_products.productid = jss_products_tree.productid)
INNER JOIN jss_sections ON jss_sections.sectionId = jss_products_tree.sectionid group by jss_sections.sectionId

Ejemplo 3)

Se quiere buscar un producto. Queremos que buscar las secciones y el número de productos que tiene esa sección. Por ejemplo, si buscamos la palabra curado, es perfectamente posible que existan varios productos con esta palabra en su nombre. Incluso, estos productos pueden estar en secciones diferentes. Para mostrar los productos, utilizaremos la siguiente sentencia:

SELECT jss_products.productId, jss_products.name, jss_sections.sectionid, jss_sections.titleFROM (jss_products INNER JOIN jss_products_tree ON jss_products.productid = jss_products_tree.productid)INNER JOIN jss_sections ON jss_sections.sectionId = jss_products_tree.sectionidWHERE jss_products.name LIKE "%curado%"

Pero como queremos saber sólo el número de productos que hay dentro de una sección, la sentencia queda un poco diferente

SELECT count( * ) AS totalfound, jss_sections.sectionid, jss_sections.titleFROM (jss_products INNER JOIN jss_products_tree ON jss_products.productid = jss_products_tree.productid)INNER JOIN jss_sections ON jss_sections.sectionId = jss_products_tree.sectionidWHERE jss_products.name LIKE "%curado%"GROUP BY jss_sections.sectionid

Publicado en mysql . Comentario: (0). Retroenlaces:(0). Enlace

LOG en mysql

ctg | 04 Enero, 2006 23:38

Es posible habilitar una opción en mysql para que todas las operaciones queden registradas en archivo .LOG 

En el archivo my.ini

set-variable=log-bin=C:\Program Files\EasyPHP1-8\mysql\data
log=C:\TEMP\mysql.log

Publicado en mysql . Comentario: (0). Retroenlaces:(0). Enlace