Foros del Web » Programando para Internet » PHP »

explotar una cadena y hacer un bucle con el resultado

Estas en el tema de explotar una cadena y hacer un bucle con el resultado en el foro de PHP en Foros del Web. hola, aqui vengo con otra de las mias, tengo un una par de tablas, noticias y subcategorias, ahora, quiero tener la oportunidad de asignarle una ...
  #1 (permalink)  
Antiguo 19/11/2007, 08:32
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Exclamación explotar una cadena y hacer un bucle con el resultado

hola, aqui vengo con otra de las mias, tengo un una par de tablas, noticias y subcategorias, ahora, quiero tener la oportunidad de asignarle una o varias subcategorias a cada noticia, al ingresar la noticia le mando los ID's de cada subcategoria como una cadena (no como un entero), porque pueden ser varios, hasta ahi todo va bien, el problema es que para mostrar a que subcategoria pertenece cada noticia se me traba el paraguas, de todo lo que he intentado, lo que mas se acerca a lo que quiero es lo siguiente:
Código PHP:
<?php // consulta para mostrar las subcategorias
      // $row[noticia_ID] es el ID de la noticia tomado de la consulta principal que muestra las noticias
$sqlQuerySubcategorias mysql_query("SELECT noticiaSubcategoriaID FROM noticias WHERE noticia_ID = '$row[noticia_ID]'"$db_link) or die(mysql_error());
while(
$rowSubcategorias mysql_fetch_array($sqlQuerySubcategorias)){
    
$separarSubcategorias $rowSubcategorias['noticiaSubcategoriaID'];

    
$subCategoria explode(","$separarSubcategorias);
    echo 
$subCategoria[0]."<br>";
    echo 
$subCategoria[1]."<br>";
    echo 
$subCategoria[2]."<br>";
    echo 
$subCategoria[3]."<br>";
}
?>
con este codigo logro explotar la cadena y sacar los ID's de cada subcategoria, pero no debe ser asi, ya que dichas subcategorias pueden aumentar en medida que el sitio avance y no puedo restringir el numero de subcategorias al que pertenesca cada noticia.

por otro lado, una vez logrado esto, deberia hacer un bucle y dentro una consulta para mostrar el nombre de cada subcategoria y no el ID (creo)

espero como siempre su ayuda


NOTA: tengo en mente otra forma de hacer esto y es hacer una tabla intermedia en la base de datos entre la tabla noticias y la tabla subcategorias y guardar en una relacion de 1 a 1 el ID de la noticia con el ID de la subcategoria, pero tendria que hacer algo parecido a esto a la hora de hacer el INSERT de la noticia.
si alguien tiene idea de como, por fa, agradezco todas las sugerencias .
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #2 (permalink)  
Antiguo 19/11/2007, 09:29
Avatar de pilsenero  
Fecha de Ingreso: septiembre-2006
Ubicación: Montevideo-Uruguay
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 2
Re: explotar una cadena y hacer un bucle con el resultado

para mi tu problema es de diseño si no sabes a cuantas subcategorias puede pertenecer cada noticia lo mejor seria tener una tabla nueva con 2 campos (id_noticia, id_subcategoria).
despues es simplemente hacer una consulta con el id de la noticia y ahi obtenes todos las subcategorias.
  #3 (permalink)  
Antiguo 19/11/2007, 09:37
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: explotar una cadena y hacer un bucle con el resultado

Cita:
Iniciado por pilsenero Ver Mensaje
para mi tu problema es de diseño si no sabes a cuantas subcategorias puede pertenecer cada noticia lo mejor seria tener una tabla nueva con 2 campos (id_noticia, id_subcategoria).
despues es simplemente hacer una consulta con el id de la noticia y ahi obtenes todos las subcategorias.
esa parte ya la se
Cita:
Iniciado por rogertm Ver Mensaje
NOTA: tengo en mente otra forma de hacer esto y es hacer una tabla intermedia en la base de datos entre la tabla noticias y la tabla subcategorias y guardar en una relacion de 1 a 1 el ID de la noticia con el ID de la subcategoria, pero tendria que hacer algo parecido a esto a la hora de hacer el INSERT de la noticia.
si alguien tiene idea de como, por fa, agradezco todas las sugerencias .
pero el problema es que asi, seria muy facil (pero no profesional) una vez ingresada la noticia, asignarle la subcategoria mediante un select, es mejor para el cliente ingresar la noticia y por checkbox que se le asignen las subcategorias a la noticia en el mismo formulario de subir las noticias.

de todas formas gracias por tu comentario

saludos y suerte
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #4 (permalink)  
Antiguo 19/11/2007, 10:14
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: explotar una cadena y hacer un bucle con el resultado

No entiendo bien tu problema. Imagina que tienes una cadena de números separados por comas. La función explode() lo que hace es generarte un array de n elementos a partir de un punto de corte:

Código PHP:
$categorias "1,2,3,4,5,6";
 
//Esto te genera un array con 6 elementos
$arreglo explode(",",$categorias);
 
foreach ( 
$arreglo as $catid ) {
  echo 
"$catid <br />";

Esa era tu duda? Si no explicamela mejor.

Un saludo,
  #5 (permalink)  
Antiguo 19/11/2007, 10:25
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: explotar una cadena y hacer un bucle con el resultado

si, eso lo intente y me salio asi como dices, pero ahi fue donde se me congestionO el cerebelo y me puse a ver la pelota (total Cuba perdio ) pero bueno, no quise poner todos los codigos que use por no confundir a los que intentaran ayudarme, pero una vez ahi, tengo que hacer otra consulta dentro del bucle para mostrar los nombres de las subcategorias y no los ID's, a ver si ahora me explique mejor

gracias mil
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #6 (permalink)  
Antiguo 19/11/2007, 10:28
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: explotar una cadena y hacer un bucle con el resultado

OH...! ya creo que lo veo, en lugar de
Código PHP:
$categorias "1,2,3,4,5,6";
 
//Esto te genera un array con 6 elementos
$arreglo explode(",",$categorias);
 
foreach ( 
$arreglo as $catid ) {
  echo 
"$catid <br />";

tendria que poner:
Código PHP:
$categorias "1,2,3,4,5,6";
 
//Esto te genera un array con 6 elementos
$arreglo explode(",",$categorias);
 
foreach ( 
$arreglo as $catid ) {
  
$query mysql_query("SELECT bla bla bla");

???
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #7 (permalink)  
Antiguo 19/11/2007, 10:31
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: explotar una cadena y hacer un bucle con el resultado

Me tope con el mismo problema al diseñar mi blog... Para saber el nombre de usuario y la categoria de cada mensaje, pues solo guardo el id con el mensaje. Lo solucione de manera sencilla:
Código PHP:
 
$cat_ids 
mysql_query("SELECT id,nombre from FROM categorias");
$nombres = array();
while(
$datos mysql_fetch_object($cat_ids) {
  
$nombres[$datos->id] = $datos->nombre;
}
 
$categorias "1,2,3,4,5,6";
 
//Esto te genera un array con 6 elementos
$arreglo explode(",",$categorias);
 
foreach ( 
$arreglo as $catid ) {
    
$catnombre $nombres[$catid];
    echo 
"<b>Id $catid:</b> $catnombre<br />";

Un saludo,
  #8 (permalink)  
Antiguo 19/11/2007, 10:36
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: explotar una cadena y hacer un bucle con el resultado

gracias man, lo reviso esta noche en casa y mañana te comento, tu siempre salvandome la vida, jajaja
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #9 (permalink)  
Antiguo 21/11/2007, 07:32
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: explotar una cadena y hacer un bucle con el resultado

me salio, y digo me salio, porque me salio:
Código PHP:
<?php
$sqlQuerySubcategorias 
mysql_query("SELECT noticia_ID, noticiaSubcategoriaID FROM noticias WHERE noticia_ID = '$row[noticia_ID]'"$db_link) or die(mysql_error());
while(
$rowSubcategorias mysql_fetch_array($sqlQuerySubcategorias)){
    
$separarSubcategorias $rowSubcategorias['noticiaSubcategoriaID'];            

    
$subCategoria explode(","$separarSubcategorias);
    foreach(
$subCategoria as $subcatID){
        
$subcatNombre $nombres[$subcatID];

        
$sub mysql_query("SELECT subcategoria_ID, subcategoriaSubcategoria FROM subcategorias WHERE subcategoria_ID = '$subcatID'");
        while(
$rowSub mysql_fetch_array($sub)){
            echo 
"<a href='#$rowSub[subcategoria_ID]'>$rowSub[subcategoriaSubcategoria]</a>";
        }
    }
}
?>
como me imagine, tenia que hacer una consulta dentro del bucle :-p

nos vemos por ahi
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #10 (permalink)  
Antiguo 21/11/2007, 16:30
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: explotar una cadena y hacer un bucle con el resultado

rogertm, crees que por gusto escribi todo ese codigo?

Código PHP:
while () {
    foreach () {
        while () {
            
//Codigo A
        
}
    }

Estas loco? Cuántas veces quieres que se ejecute el codigo A? Estas bromeando no???

Jaja man, es broma. Pero es serio ... La razón por la que puse la consulta fuera del bucle es porque así te ahorrarás muchas consultas a la base de datos, todas pidiendo las mismas columnas de diferentes filas. Si hicieras una consulta unica, que te genre un array con todos los datos que vas a necesitar... Te aseguro que tiu servidor te lo agradecerá...

Código PHP:
// Obtenemos las categorias de la noticia
$sqlQuerySubcategorias mysql_query("SELECT noticia_ID, noticiaSubcategoriaID FROM noticias WHERE noticia_ID = '{$row['noticia_ID']}'"$db_link) or die(mysql_error());
$rowSubcategorias mysql_fetch_assoc($sqlQuerySubcategorias);
 
//Creamos un array que contenga los datos necesarios SOLO para las 
//categorias que vamos a usar
$cats mysql_query("SELECT subcategoria_ID, subcategoriaSubcategoria FROM subcategorias WHERE subcategoria_ID IN ($rowSubcategorias['noticiaSubcategoriaID'])"$db_link) or die(mysql_error());
$catlist = array();
while(
$tmpcats mysql_fetch_object($cats)) {
    
$catlist[$tmpcats->subcategoria_ID] = $tmpcats->subcategoriaSubcategoria;
}
 
$subCategoria explode(","$rowSubcategorias['noticiaSubcategoriaID']);
 
foreach(
$subCategoria as $subcatID){
    
//En vez de consultar nuevamente a la BD, buscamos en nuestro array
    
echo "<a href='#$subcatID'>{$catlist[$subcatID]}</a>";

Ya sabes... Lo tomas o lo dejas

Un saludo,

Última edición por okram; 21/11/2007 a las 16:36
  #11 (permalink)  
Antiguo 22/11/2007, 08:13
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: explotar una cadena y hacer un bucle con el resultado

LOCO YO LOCO YO???
esque me perdi con el primer codigo que me pasaste, por otro lado man, tengo mucho que aprender AUN, jajajaja
y QUINTO lugar, tengo que llevarme eso para mi casa y probarlo alla, por que es un trabajito que no es de mi trabajo oficial, es otra cosa, y como sabes, mi problema es cuba y .............!
y bueno, en TERCER lugar, mañana te digo, jajajaa
por eso dije que me salio, pero me imaginaba que hacer la consulta dentro del bucle era algo jodio pal servidor,
y nada man, en realidad me enrede con el primer while, y para hacer una preguntica tecnica:
Código PHP:
while($datos mysql_fetch_object($cat_ids) {
  
$nombres[$datos->id] = $datos->nombre;

eso es construir un objeto???

saludetes y gracias mil
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #12 (permalink)  
Antiguo 22/11/2007, 16:53
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: explotar una cadena y hacer un bucle con el resultado

Exacto. La función mysql_fetch_object() te creará un objeto cuyas propiedades serán las columnas de tu resultados. No hay diferencia de velocidad significativa entre las otras mysql_fetch_funcion()... Seria lo mismo poner:

Código PHP:
while($datos mysql_fetch_assoc($cat_ids) {
  
$nombres[$datos['id']] = $datos['nombre'];
}  
 
// ó
 
while($datos mysql_fetch_array($cat_ids) {
  
$nombres[$datos['id']] = $datos['nombre'];

Lo importante es que $nombres (o $catlist en el segundo ejemplo) será un array que contiene como índices al id de categoria y el valor de cada indice es el nombre respectivo de la categoria... Prueba el segundo ejemplo tal y como te lo di y me comentas

Un saludo,
  #13 (permalink)  
Antiguo 23/11/2007, 07:38
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: explotar una cadena y hacer un bucle con el resultado

re: hola, na man, eres un DIOS en esto de programar en php, solo cupy & paste y todo bien, lo unico que tuve que hacer fue en la consulta quitar unas comillitas:
Código PHP:
($rowSubcategorias[noticiaSubcategoriaID]) 
y todo salio como estaba previsto.

gracias por todo man, probare los otros ejemplo que me das y te comento despues.

saludos y re: gracias mil

PD: te voy a proponer como moderador del foro 18
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
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 18:57.