Foros del Web » Programando para Internet » PHP »

ids separadas por comas en una variable

Estas en el tema de ids separadas por comas en una variable en el foro de PHP en Foros del Web. Hola, tengo una variable que recoge todos los ids de productos separados por comas $variable = "5,8,3,5,1,55,4..." . Tengo una tabla con todos los productos ...
  #1 (permalink)  
Antiguo 29/12/2002, 09:44
 
Fecha de Ingreso: enero-2002
Mensajes: 90
Antigüedad: 22 años, 10 meses
Puntos: 0
ids separadas por comas en una variable

Hola, tengo una variable que recoge todos los ids de productos separados por comas $variable = "5,8,3,5,1,55,4..." . Tengo una tabla con todos los productos y sus respectivas ids, como puedo hacer que a partir de la variable me mustren el nombre de todos los productos??
Estoy utilizando mysql

gracias y saludos
  #2 (permalink)  
Antiguo 29/12/2002, 10:08
Avatar de chalito  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago, chile
Mensajes: 221
Antigüedad: 21 años, 10 meses
Puntos: 0
debes separa la variable en un array con los valores de las ids
Código PHP:
$ids split(","$ids); 
Ahora ya tienes un array con los ids, ahora solo falata administrarlos con el correspondiente bucle

Saludos
  #3 (permalink)  
Antiguo 29/12/2002, 10:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Por ejemplo ..

Código PHP:
// uso explode .. esto no carga el motor de expresiones regulares como hace el split(). Se optimiza algo el rendimiento.
$ids explode(","$ids); 

// Un bucle para leer el array generada por el explode()
foreach ($ids as $id){
echo 
$id.'<br>';
// aquí tu SELECT .. WHERE id='$id' .. por si quieres obtener tu registro id ...

Tambien puedes acceder a los elementos del array de forma individual $ids[indice] ...

Un saludo,

Última edición por Cluster; 29/12/2002 a las 10:49
  #4 (permalink)  
Antiguo 29/12/2002, 11:11
 
Fecha de Ingreso: enero-2002
Mensajes: 90
Antigüedad: 22 años, 10 meses
Puntos: 0
gracias por las respuesta, voy a probarlo y ya os digo que tal

saludos
  #5 (permalink)  
Antiguo 29/12/2002, 11:35
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 23 años
Puntos: 69
Y ahora un pequeño comentario, a modo de "detallecito"...
Si ya tienes todos los id's separados por comas, entonces para hacer un query que te devuelva todos los productos con ESOS id's... es muy muy sencillo... tan solo tienes que hacer :

Código PHP:
<?php
$sql 
"SELECT * FROM productos WHERE id_producto IN ($ids)";
$rs mysql_query($sql$conn);
?>
De esta manera, no es necesario hacer Split, ni Explode. y realizar 1 sola consulta a la base de datos, en lugar de 1 por cada producto.

Saludos. !
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #6 (permalink)  
Antiguo 29/12/2002, 11:53
 
Fecha de Ingreso: enero-2002
Mensajes: 90
Antigüedad: 22 años, 10 meses
Puntos: 0
Acabi de probar lo que dice Cluster y es justo lo que necesitaba. La funcion que dices tu es la que estaba probando para utilizar, pero le encontraba un inconveniente y era que tenia una variable con id repetidos $variable= "5,3,5,4,5,8,21,1" y el problema era que me mostraba los registros sin repetir, es decir el producto que tenia id=5 solo me lo mostraba una vez, en vez de las 3 veces que deberia.

saludos
  #7 (permalink)  
Antiguo 30/12/2002, 03:55
 
Fecha de Ingreso: enero-2002
Mensajes: 90
Antigüedad: 22 años, 10 meses
Puntos: 0
Hola, me acaba de surgir otro problema, con el codigo que me dice cluster he hecho dos foreach distintos a dos tablas distintas. Lo que quiero es juntar los resultados en una tabla, es decir el primer dato del primer bucle junto al primer dato del segundo bucle, y asi sucesivamente.
"<tr><td>$datos_foreach1</td><td>$datos_foreach2</td></tr>"
Lo he intentado haciendo un bucle aparte pero nada de nada.
A ver si me podeis ayudar,

saludos

Última edición por israeljs; 30/12/2002 a las 03:58
  #8 (permalink)  
Antiguo 30/12/2002, 04:13
Avatar de SpiceMan  
Fecha de Ingreso: noviembre-2002
Mensajes: 160
Antigüedad: 22 años
Puntos: 0
Código PHP:
for ($contador 0$contador count($array1); $contador++) {
  echo 
"<tr><td>$array1[$contador]</td><td>$array2[$contador]</td></tr>";

siempre y cuando tengan la misma cantidad de elementos ambos arrays, claro
  #9 (permalink)  
Antiguo 30/12/2002, 07:18
 
Fecha de Ingreso: enero-2002
Mensajes: 90
Antigüedad: 22 años, 10 meses
Puntos: 0
Hola, esto es lo que estoy utilizando y solo me devuelve el primer registro del array. Eso si $recibidos y $colaborador tienen la misma cantidad de elementos. que estoy haciendo mal??


Código PHP:
$recibidos explode(","$recibidos);  
foreach (
$recibidos as $recibidos2){

$result = @mysql_query("SELECT artista,album FROM musica WHERE ids='$recibidos2' "$dbi);
while (
$row mysql_fetch_row($result)){

$rec "$row[0] - $row[1]";

}}

$colaborador explode(","$colaborador);
foreach (
$colaborador as $colaborador2){

$result = @mysql_query("SELECT uname FROM usuarios WHERE uid='$colaborador2' "$dbi);
while (
$row mysql_fetch_row($result)){

$col "$row[0]";

}}

 for (
$contador 0$contador count($col); $contador++) {
  echo 
"<tr><td>$rec</td><td>$col</td></tr>";
 } 
  #10 (permalink)  
Antiguo 30/12/2002, 08:15
Avatar de SpiceMan  
Fecha de Ingreso: noviembre-2002
Mensajes: 160
Antigüedad: 22 años
Puntos: 0
veamos:

Código PHP:
$recibidos explode(","$recibidos);  
foreach (
$recibidos as $recibidos2) {
  
$result = @mysql_query("SELECT artista,album FROM musica WHERE ids='$recibidos2' "$dbi);
  while (
$row mysql_fetch_row($result)){
    
// $rec = "$row[0] - $row[1]";  <= esta linea hace se le asigne a un valor distinto a cada iteracion, siempre mostraba el ultimo valor obtenido.
    
array_push ($rec"$row[0] - $row[1]"); // <= asi deberia funcionar, ingresamos un nuevo valor en un array para cada valor obtenido
  
}
}
$colaborador explode(","$colaborador);
foreach (
$colaborador as $colaborador2) {
  
$result = @mysql_query("SELECT uname FROM usuarios WHERE uid='$colaborador2' "$dbi);
  while (
$row mysql_fetch_row($result)){
    
// $col = "$row[0]";   <= lo mismo sucede aca
    
array_push ($col$row[0])  // <= lo mismo que antes. Las comillas no hacian falta, y convienen no ponerlas para evitar el parseo y sobrecargar menos al servidor.
  
}
}
for (
$contador 0$contador count($col); $contador++) {
  echo 
"<tr><td>$rec[$contador]</td><td>$col[$contador]</td></tr>"// Ahora usamos los arrays obtenidos previamente

Sobre array_push
  #11 (permalink)  
Antiguo 30/12/2002, 08:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Esto no tiene sentido:

for ($contador = 0; $contador < count($col); $contador++) {
echo "<tr><td>$rec</td><td>$col</td></tr>";
}

estas usando un bucle que hace X iteracciones para mostrar el mismo valor de $rec y $col q tengan antes de entrar al bucle?

Si $rec y/o $col son Arrays .. deberas acceder a cada elemento del array por un indice .. en tu caso el indice es $contador que se incremente en una unidad a cada pasada del bucle FOR ..

A todo esto ..
¿que relación hay entre las dos tablas que usas? .. puede ser ese uid y ids son iguales para ambas tablas? .. Si es así deberias pensar en hacer una sola consulta que relacione ambas tablas para obtener los datos que necesites de las dos bajo las condiciones que requieras .. con eso obtendrias una unica tabla de resultados accediendo a esta con tu tipico bucle "While" unico ..

Un saludo,
  #12 (permalink)  
Antiguo 30/12/2002, 09:05
 
Fecha de Ingreso: enero-2002
Mensajes: 90
Antigüedad: 22 años, 10 meses
Puntos: 0
Hola, SpiceMan, el codigo que has puesto da este error:

Warning: First argument to array_push() needs to be an array

en las dos lineas deonde se encuentra en array_push()
El erro se me muestras tantas veces como elementos dentro del array hay.
hay algo mal??

En lo que preguntas Cluster el uid es el identificador de los colaboradores y el ids el identificador de cada disco. De ahi que tengo que hacer dos bucles distintos

saludos
  #13 (permalink)  
Antiguo 30/12/2002, 09:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Puedes empezar con un array definido sin elementos ..
$rec=Array();
$col=Array();

(al principo del código ..)

Un saludo,
  #14 (permalink)  
Antiguo 30/12/2002, 09:41
 
Fecha de Ingreso: enero-2002
Mensajes: 90
Antigüedad: 22 años, 10 meses
Puntos: 0
Gracias a todos por vuestra ayuda, ya me funciona lo que queria, solo me faltaba poner lo ultimo que ha dicho Cluster

saludos

FELIZ AÑO NUEVO
  #15 (permalink)  
Antiguo 30/12/2002, 16:11
Avatar de SpiceMan  
Fecha de Ingreso: noviembre-2002
Mensajes: 160
Antigüedad: 22 años
Puntos: 0
definir un array vacio...

extraño el perl
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 22:44.