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