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

Consulta separar valores

Estas en el tema de Consulta separar valores en el foro de Mysql en Foros del Web. hola necesito hacer una consulta para una base de datos de libros. hay una tabla en la que existe un campo llamado materia y que ...
  #1 (permalink)  
Antiguo 13/08/2010, 05:28
 
Fecha de Ingreso: diciembre-2007
Mensajes: 33
Antigüedad: 16 años, 4 meses
Puntos: 0
Consulta separar valores

hola
necesito hacer una consulta para una base de datos de libros.
hay una tabla en la que existe un campo llamado materia y que contiene a qué materia y submaterias pertenece un libro concreto. Es decir un libro infantil de aventuras seria asi:

id_libro materia

23 infantil,aventuras

la materia principal y las submaterias se separan por coma

yo he hecho esta consulta
Código PHP:
select distinct SUBSTR(materia,1,INSTR(materia,',')-1) AS mate from articulos 
pero por ejemplo en las materias que no tienen submateria, es decir que no llevan ',' al final, no las muestra

¿alguna sugerencia?

tambien si me podeis orientar para cuando luego tenga que mostrar todas las submaterias, pues mejor

GRacias de antemano
Saludos
  #2 (permalink)  
Antiguo 13/08/2010, 06:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta separar valores

Cita:
¿alguna sugerencia?
Si: Diseñar bien esa base, porque lo que estás mencionando es lo que se denomina "campo multivaluado", lo que es una flagrante violación al modelo relacional y a la normalización de tablas, que lo único que trae son problemas como los que mencionas... Por eso el modelo no lo admite.
Por lo demás, si no puedes modificar la base, ese tipo de situación es más sencilla de resolverla por programación.

¿Existe alguna posibilidad de modificar la base?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/08/2010, 08:05
 
Fecha de Ingreso: diciembre-2007
Mensajes: 33
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Consulta separar valores

vale gracias por tu "clase" sobre las reglas normales de las bases de datos. PEro yo te estoy hablando de una base de datos que el cliente trabaja así con ella. Porque sí, así la usan y a nosotros nos han dicho que le hagamos una tienda con esa base de datos.

Ahora bien. ¿hay alguna manera de hacerlo lo que yo preguntaba?

PD: la base de datos es así y así se quedará.
  #4 (permalink)  
Antiguo 13/08/2010, 08:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta separar valores

Soy de la opinión de gnzsoloyo, pero puesto que la base se quedará como está, usa SELECT DISTINCT SUBSTRING_INDEX(materia,',',1) mate FROM articulos
o así
SELECT SUBSTRING_INDEX(materia,',',1) mate FROM articulos GROUP BY SUBSTRING_INDEX(materia,',',1)

No lo he probado. Entiendo que toda submateria tiene materia. No nos has dicho cuántas submaterias puede haber, aunque creo que eso ahora no importa, al menos para la materia.

Edito: mejor la primera con DISTINCT.

Última edición por jurena; 13/08/2010 a las 09:05
  #5 (permalink)  
Antiguo 13/08/2010, 08:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta separar valores

La repuesta más simple, ya te la di:
Cita:
Por lo demás, si no puedes modificar la base, ese tipo de situación es más sencilla de resolverla por programación.
Lamento que no puedas modificar la base. Si el proyecto estuviese en mis manos trataría por todos los medios de convencer al cliente de arreglar ese defecto, porque luego tendría que poner parches sobre parchado para que la cosa no traiga problemas otra vez.
Pero, bueno, es tu prerrogativa.

Mi primer intento de parchado sería:
Código MySQL:
Ver original
  1.     DISTINCT IF(INSTR(materia,',')=0,materia,  SUBSTR(materia,1,INSTR(materia,',')-1)) AS mate
  2. FROM articulos;

Nota: El recalcado de "clase" y la frase final sonaron algo ásperas... Supongo que habrá sido accidental.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 13/08/2010, 09:00
 
Fecha de Ingreso: diciembre-2007
Mensajes: 33
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Consulta separar valores

Cita:
Iniciado por jurena Ver Mensaje
Soy de la opinión de gnzsoloyo, pero puesto que la base se quedará como está, usa SELECT DISTINCT SUBSTRING_INDEX(materia,',',1) mate FROM articulos
o así
SELECT SUBSTRING_INDEX(materia,',',1) mate FROM articulos GROUP BY SUBSTRING_INDEX(materia,',',1)

No lo he probado. Entiendo que toda submateria tiene materia. No nos has dicho cuantas submaterias puede haber, aunque creo que eso ahora no importa, al menos para la materia.
gracias por tu respuesta, había visto esa funcion antes, pero no sabía muy bien que resultado podría dar. Lo probaré.
De todas maneras intentaré convencer al cliente para que utilice otro campo de su aplicación para indicar de qué materia principal se trate, y que sólo sea un valor, y ese campo "multivaluado" utilizarlo sólo como una descripción menor del artículo.
Ya veremos qué ocurre.

Etiquetas: Ninguno
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 02:33.