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

Buscar en un array en la BD

Estas en el tema de Buscar en un array en la BD en el foro de Mysql en Foros del Web. Hola, qué tal? Tengo una BD donde guardo Profesores, y en cada profesor hay un campo 'materias' donde se guarda en forma de array los ...
  #1 (permalink)  
Antiguo 13/09/2010, 09:31
Avatar de fakulicious  
Fecha de Ingreso: mayo-2008
Ubicación: Mendoza
Mensajes: 140
Antigüedad: 15 años, 11 meses
Puntos: 2
Pregunta Buscar en un array en la BD

Hola, qué tal?

Tengo una BD donde guardo Profesores, y en cada profesor hay un campo 'materias' donde se guarda en forma de array los id de las materias que éste imparte.

Por ejemplo:

PROFESOR / MATERIAS

Jorge ------------ 6,10,12
Jose ------------- 5,12,18
Manuel --------- 2,6,10

Si quiero buscar todos los profesores que imparten la materia '12', cómo sería mi consulta?

Desde PHP, probé con:

Código PHP:
$idMateria $_POST['idMateria'];

$consulta mysql_query("SELECT * FROM profesores WHERE materias LIKE '%".$idMateria."%'"$link); 
Siendo $idMateria igual a 2. Pero me devolvió también las que tienen el 12.

Luego en el foro de PHP me recomendaro igualar o usar IN, pero ninguna de las opciones dio resultado.

Me recomendaron consultar en este foro.

Hay alguna manera de consultar por uno de los valores del array que tengo en el campo materias?

Espero que alguien pueda ayudarme. Muchas gracias.
__________________
Facundo
http://www.creactivo.com.ar
  #2 (permalink)  
Antiguo 13/09/2010, 10:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Buscar en un array en la BD

SELECT campo1, campo2 FROM tutabla WHERE FIND_IN_SET(valorbuscado, nombrecampo)>0;

también podrías usar expresiones regulares. Mira aquí:
http://www.forosdelweb.com/f86/busqu...-comas-732797/

Pero lo mejor es cambiar la estructura y relaciones de la base y evitar un campo multivaluado separado por comas. Podrás hacerlo fácilmente. Pero si no te es posible, usa FIND_IN_SET().
  #3 (permalink)  
Antiguo 13/09/2010, 10:27
Avatar de fakulicious  
Fecha de Ingreso: mayo-2008
Ubicación: Mendoza
Mensajes: 140
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Buscar en un array en la BD

Gracias jurena! Lo probé y funcionó perfecto.

De todas formas me gustaría obtener más información sobre lo que me decís de cambiar la estructura y relaciones de la base de datos. Para tenerlo en cuenta.

Si tenés algún link sobre eso, te lo agradecería mucho! Igual por ahora con FIND_IN_SET estoy bien! ;)

Muchísimas gracias por la ayuda!
__________________
Facundo
http://www.creactivo.com.ar
  #4 (permalink)  
Antiguo 13/09/2010, 13:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Buscar en un array en la BD

si un profesor puede impartir varias asignaturas y una asignatura puede ser impartida por varios profesores, tienes una relación muchos a muchos, y por tanto debes tener una tabla intermedia, es decir, son tres tablas:
profesores
idProf, nombreProf, etc.

asignaturas
idAsig, nombreAsig


profesoresasignaturas
idProfAsig, idProf, idAsig

naturalmente el idProf de profesoresasignaturas está relacionado, como clave foránea, con el idProf de profesores que es su clave primaria; y el nombreAsig de profesoresasignaturas es también clave foránea y está relacionado con el idAsig de asignaturas, que es su clave primaria. Los índices te permitirán trabajar a gran velocidad y obtener estadísticas de todo tipo, algo que también puede hacerse con lo que tienes, pero debes utilizar programación, mientras que con esa estructura que te propongo puedes conseguirlo desde la base de datos. Esto es algo fundamental en las bases relacionales. Mira sobre eso y la normalización.

Etiquetas: bd
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:40.