Foros del Web » Programando para Internet » PHP »

Multiples Identificadores (id) en un campo

Estas en el tema de Multiples Identificadores (id) en un campo en el foro de PHP en Foros del Web. Bien pues el problema al que me enfrento ahora es justo el que menciono en el titulo, he buscado referencias similares sin hallar nada sustancial. ...
  #1 (permalink)  
Antiguo 25/09/2003, 09:28
Avatar de ipalnemo  
Fecha de Ingreso: abril-2002
Ubicación: Mexico City
Mensajes: 12
Antigüedad: 22 años
Puntos: 0
Multiples Identificadores (id) en un campo

Bien pues el problema al que me enfrento ahora es justo el que menciono en el titulo, he buscado referencias similares sin hallar nada sustancial.
La idea es colocar en un campo varios identificadores separados por comas, es decir de un articulo "X" tengo caracteriscas varias mismas que por optimizacion de mi base me gustaria fueran en un solo campo por ejemplo:

tabla: articulos
campo : id, descripcion, CARACTERISTICAS, otros campos

tabla caracteristicas
campos: id, caracteristica

Donde en caracteristicas.articulos irian los id.caracteristcas en una cadena de numericos separados por como 1,65,85,95,4,6

Mi duda seria como recuperar esos multiples id para ejecutar una consulta.....
  #2 (permalink)  
Antiguo 25/09/2003, 21:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si tienes ese campo con esos datos separados por comas .. puedes usar dos alternativas ..

A) sólo PHP:

Código PHP:
$ids_caracteristicas=explode(','$row['caracteristicas']); 
y .. usando un bucle foreach() ya que el explode te entrega un array .. lo recorres y ejecutas tus consultas (del tipo que sean )

Código PHP:
foreach ($ids_caracteristicas as $id_caracteristica){

$sql="SELECT o .. UPDATE .. o DELETE ... ... WHERE nose='$id_caracteristica'";

mysql_query($sql);


B) usando SQL y PHP

En mysql tienes el (no sé como se llama si operador o función .. o ..): IN (lista de valores separados por comas) ..

Y lo puedes usar en SELECT .. DELTE o UPDATE. Un ejemplo:

Código PHP:
$sql="DELTE FROM tabla WHER campo IN (".row['caracteristicas'].")"

Y .. como consejo .. Sobre todo a nivel de posibilidades de hacer cosultas más variadas y fáciles a eso datos que guardas ..

Esos ID de caracteristicas tendrían que ir en "UN registro por ID" .. y relacinado con el artíclo en relación 1->N (1 artículo .. puede tener várias descripciones) .. Este es uno de los conceptos de "normalización" de base de datos ..

Tus tablas tendrían que ser algo así:

Artículos tabla ..
id_articulo
descripcion
otros_campos

Descripción tabla
id_descripcion
id_articulo
descripcion_texto
otros_campos

(los campos en negrita son las claves foráneas ..)

Pero .. si tienes descripciones (X fijas o variables) y artículos .. necesitarias de una 3ª tabla para hacer una realación tipo N -> N (varios artículos pueden tener varias descripciones)

Esa tercera tabla guardará tus ID del articulo y la ID de la descripción ..

ID_relacion
id_articulo
id_relacion

y tus tablas anteriores .. quitando el id_artículo en la tabla de descripciones ...

Las consultas que requieras hacer que usen várias tablas sólo tienes que llamar a tus campos vía:

nombretablaquepertenece.nombrecampo

Y para establecer la "integridad referencial" entre esos datos .. usa condicionales tipo:

WHERE tabla_articulos.id_articulo=tabla_descripciones.id _articulo AND (si necesitas más condiciones .. ejemplo AND tabla_articulos.id_articulo='nº' ...)

Como veras .. el tema del "SQL" y modelo de datos en un tema interesante que debes de evaluar y aprender si corresponde.

Con ese tipo de estructuras de tus BD "normalizadas" puedes hacer infinidad de "consultas" por los más variados temas .. Ejemplo .. agrupar artículos que tengan la caracteristica X ... (si usas tu campo "string" que contiene esos IDs .. una consulta de ese tipo se complica y se ralentiza enorrrmemente el proceso ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 26/09/2003, 14:55
Avatar de ipalnemo  
Fecha de Ingreso: abril-2002
Ubicación: Mexico City
Mensajes: 12
Antigüedad: 22 años
Puntos: 0
Cluster
Agradezco mucho tu amplia respuesta en general resolviste mi duda y como acertadamente escribes lo mejor es una BD normalizada, pero tomando en cuenta eso es por lo que surge mi duda no se si es lo mismo normalizado que optimizado pero la BD que pretendo intenta ser normalizada a la misma vez que optima...
en cuanto a los id o keys y sus relaciones entre tablas se bien la importancia que tienen y lo valioso que resultan al momento de las consultas, por ello indagaba sobre este rubro..................

Ademas pa lo que la quiero esta bien , es para una intranet y sera una pequeña aplicacion solamente ....
TANKS
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 04:29.