Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Funciones de cadenas en MYSQL

Estas en el tema de Funciones de cadenas en MYSQL en el foro de Mysql en Foros del Web. Hola, les quiero consultar por lo siguiente. Estoy haciendo un curso de SQL y en el curso estamos viendo funciones de cadenas y hay que ...
  #1 (permalink)  
Antiguo 03/05/2014, 18:18
 
Fecha de Ingreso: enero-2010
Mensajes: 50
Antigüedad: 14 años, 9 meses
Puntos: 0
Funciones de cadenas en MYSQL

Hola, les quiero consultar por lo siguiente. Estoy haciendo un curso de SQL y en el curso estamos viendo funciones de cadenas y hay que realizar un mini trabajo práctico. Lo que me piden es lo siguiente (espero que se entienda),

Tengo una base de datos llamada libreriaeducativa en la cual tengo una tabla llamada libros y dentro de la misma tengo los siguientes valores "columnas/títulos" (id, titulo, autor y costo), los valores respectivos a dichas columnas,

('1','Mis recetas favoritas','Karlos Arguiñano','100')
('2','Mafalda','Quino','200')
('3','Caballo de Troya ','Benitez','150')
('4','Computación en la nube','Luis Joyanes Aguilar','350')

Cabe decir que me "conecto" a la base de datos a través del CMD de Windows 7 y tengo el Xampp instalado.

Ahora bien dicha la introducción paso a explicar lo que precisaría hacer. Cuando me conecto a la base de datos hago

MYSQL -u root

USE libreriaeducativa

Y por ultimo trato de usar el CONCAT_WS y LPAD haciendo SELECT CONCAT('...')(LPAD('titulo','10')) FROM libros;

Ya que lo que necesitaría hacer (y acá viene la parte complicada de explicar), es hacer que por pantalla me muestre la tabla libros y que de la columna titulo selecciones 10 caracteres, quite el resto de los caracteres que se encuentran dentro del campo y agregue ... (tres puntos suspensivos), quedando de la siguiente manera.







El problema que al ejecutar el siguiente comando CONCAT_WS y LPAD haciendo SELECT CONCAT('...')(LPAD('titulo','10')) FROM libros; me devuelve la tabla vacía y me dice 4 rows in set, 4 warnings (0.00 sec).

Quisiera saber entonces como puedo hacer para que me queden tres puntos suspensivos al final de la línea, quedándome por supuesto 10 caracteres del título y quitando el resto (tal como se ve en la imagen).

Espero que se pueda entender y principalmente que me puedan ayudar. Saludos.
  #2 (permalink)  
Antiguo 03/05/2014, 19:10
 
Fecha de Ingreso: enero-2010
Mensajes: 50
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Funciones de cadenas en MYSQL

Como la imagen no se ve la subí a Mega, espero que no les moleste.

https://mega.co.nz/#!51QUCboK!S3CTCGdA2pUCOV9hwSMWrQQylOhE5Tx7P_bKuK7 HkQQ
  #3 (permalink)  
Antiguo 03/05/2014, 19:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Funciones de cadenas en MYSQL

Dudaría que te devuelva este mensaje:
Cita:
4 rows in set, 4 warnings (0.00 sec).
porque esta consulta:
Código MySQL:
Ver original
  1. SELECT CONCAT('...')(LPAD('titulo','10')) FROM libros;
está mal escrita.
Debería estar disparando un error de sintaxis de los bien notorios.

Código MySQL:
Ver original
  1. SELECT CONCAT(LEFT(titulo,10), '...') Titulo FROM libros;

LPAD() no devuelve exactamente los X caracteres desde la izquierda. Se usa para otra cosa.
Cita:
LPAD(str,len,padstr)

Retorna la cadena str, alineado a la izquierda con la cadena padstr a una longitud de len caracteres. Si str es mayor que len, el valor retornado se acorta a len caracteres.
Código SQL:
Ver original
  1. mysql> SELECT LPAD('hi',4,'??');
  2.         -> '??hi'
  3. mysql> SELECT LPAD('hi',1,'??');
  4.         -> 'h'
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 03/05/2014, 19:36
 
Fecha de Ingreso: enero-2010
Mensajes: 50
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Funciones de cadenas en MYSQL

Igual más allá de si me devuelve o no el valor o qué valor me tendría que devolver, me interesaría saber cómo puedo lograr que me salga el resultado de la imagen. gnzsoloyo, disculpa que te lo diga de esa manera ya que sino perdemos el eje de mi consulta y no recibo la ayuda que estoy pidiendo. Espero que me puedan dar una mano. Saludos.
  #5 (permalink)  
Antiguo 03/05/2014, 19:45
 
Fecha de Ingreso: enero-2010
Mensajes: 50
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Funciones de cadenas en MYSQL

gnzsoloyo, disculpa mi repuesta anterior, no había visto la totalidad de tu repuesta ya que el navegador había cargado solo una parte y no toda tu repuesta. La verdad me fue muy útil, sinceramente no podía usar el LPAD, con la formula que me pasaste me salio lo que quería. Desde ya muchas gracias por tu repuesta y vuelvo a pedir disculpas por mi forma de contestarte. Saludos.
  #6 (permalink)  
Antiguo 04/05/2014, 09:30
 
Fecha de Ingreso: enero-2010
Mensajes: 50
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Funciones de cadenas en MYSQL

Me olvide de consultarte que en la imagen sale dos veces los mismos registros, osea que se repiten. Alguien sabe cómo duplicar los registros, usando obviamente la siguiente sintaxis:

Cita:
Iniciado por gnzsoloyo
SELECT CONCAT(LEFT(titulo,10), '...') Titulo FROM libros;
  #7 (permalink)  
Antiguo 04/05/2014, 10:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Funciones de cadenas en MYSQL

¿Por duplicar los registros te refieres a que salgan una vez por cada registro, aunque el texto sea el mismo?
La query que te pasé no genera distinciones ni diferenciaciones por contenido, Si esos diez primeros caracteres son iguales entre dos registros, seguirá sacándolos igual.
Es decir, si ha repeticiones, saldrán.

¿Hiciste una prueba?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 04/05/2014, 13:07
 
Fecha de Ingreso: enero-2010
Mensajes: 50
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Funciones de cadenas en MYSQL

Hola gnzsoloyo. Es como vos decis, yo tengo que traer los valores de la tabla dos veces (tal cual esta en la imagen), y que me muestre 10 caracteres y rellene al final con ... (tres puntos suspensivos), hasta ahí es tal cual como se muestra en la query que me pasaste (salvo porque me muestra los valores de la tabla una sola vez, en vez de dos veces).

En la tabla tengo 4 registros que son los siguientes,

('1','Mis recetas favoritas','Karlos Arguiñano','100')
('2','Mafalda','Quino','200')
('3','Caballo de Troya ','Benitez','150')
('4','Computación en la nube','Luis Joyanes Aguilar','350')

Al usar la query SELECT CONCAT(LEFT(titulo,10), '...') Titulo FROM libros; me devuelven lo siguiente

Mis receta...
Mafalda ...
Caballo de...
Computació...

Ahora bien, necesitaría que después de la query me muestre dos veces lo mismo, quedando así:

Mis receta...
Mafalda ...
Caballo de...
Computació...
Mis receta...
Mafalda ...
Caballo de...
Computació...

Tal cual como se ve en la imagen.

Espero que se entienda. Y muchas gracias por tu ayuda. Saludos.
  #9 (permalink)  
Antiguo 04/05/2014, 14:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Funciones de cadenas en MYSQL

Partamos de un detalle: La base te va a devolver sólo lo que tiene, y lo que se le pide. La query no puede devolver por sí misma dos veces el mismo resultado, porque para el DBMS no existe esa duplicidad.
Podrías fabricarla invocando la misma sentencia de consulta dos veces con un UNION ALL:
Código MySQL:
Ver original
  1. SELECT CONCAT(LEFT(titulo,10), '...') Titulo
  2. FROM libros
  3. SELECT CONCAT(LEFT(titulo,10), '...') Titulo
  4. FROM libros;
pero esto desde el punto de vista de los datos es un resultado falaz.
Por otro lado, lo que me estás diciendo tiene que ver con lo que quieres mostrar en la web, y no los datos de la base, y eso es tema de programación.
Sencillamente, si el problema consiste en repetir la secuencia de resultados, ¿por qué no los cargas, del lado de PHP, en un array y lo recorres dos veces?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 04/05/2014, 15:53
 
Fecha de Ingreso: enero-2010
Mensajes: 50
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Funciones de cadenas en MYSQL

Hola gnzsoloyo. Muchas gracias, eso era lo que estaba buscando. Me diste una mano impresionante con el trabajo práctico.

Con respecto hacerlo a través de PHP no lo podía hacer ya que el profesor quería que lo hagamos a través de MYSQL para que practiquemos.

Te agradezco enormemente por tu ayuda.

Un abrazo grande. Saludos.

Etiquetas: cadenas, funciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:33.