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

Pequeño Gran dilema

Estas en el tema de Pequeño Gran dilema en el foro de Mysql en Foros del Web. Buenas tardes. Necesito saber si se puede hacer lo siguiente: Teniendo una tabla con lo siguientes datos(Id(Pk),IdPertenece,datos) Ejemplo; 1 0 Pepe 2 1 Juan 3 ...
  #1 (permalink)  
Antiguo 17/10/2005, 06:41
 
Fecha de Ingreso: julio-2005
Mensajes: 38
Antigüedad: 18 años, 9 meses
Puntos: 0
Pequeño Gran dilema

Buenas tardes.

Necesito saber si se puede hacer lo siguiente:

Teniendo una tabla con lo siguientes datos(Id(Pk),IdPertenece,datos)

Ejemplo;

1 0 Pepe
2 1 Juan
3 1 Ana
4 2 Luis
5 0 Adolfo
6 5 Adriana
7 1 Eusebio

Me gustaría sacar aquellos que dependan de Pepe(1). Es decir, que debería sacar los siguientes Id.

2,3,4,7

El 4 es el problema ya que no depende directamente del 1 pero sí indirectamente ya que depende del 2 que depende del 1.

Un saludo, y gracias por las aportaciones.
Espero vuestras respuestas
  #2 (permalink)  
Antiguo 17/10/2005, 09:30
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
no creo que puedas hacerlo, ya que tendrias que diseñar una consulta sql recursiva.

de todas formas tambien me he visto en esa situacion y lo solucione usando una funcion en PHP:
Código:
function getIds(&$array_id, $idPertenece) {
	global $CONN;
	
	array_push($array_id, $idPertenece);
	$sql = "
	select id
	from tabla
	where idPertenece = ".strquoted($idPertenece);
	$result = mysql_query($sql, $CONN);
	while ($row = mysql_fetch_row($result))
		getIds($array_id, $row[0]);
}
si no me he equivocado en el codigo, la siguiente funcion:
Código:
getIds($array_id, "1")
colocara en el array "$array_id" los siguientes valores:

1, 2, 3, 4

que son los "ids" de pepe y toda su descendencia.

luego lo unico que tienes que hacer es montar la select:
Código:
$sql = "select * from tabla where id in (".implode(",", $array_id).")";
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #3 (permalink)  
Antiguo 18/10/2005, 00:48
 
Fecha de Ingreso: julio-2005
Mensajes: 38
Antigüedad: 18 años, 9 meses
Puntos: 0
OK entendido. El problema es que tenía que intentar hacerlo sin funciones recursivas para acelerar el tiempo de carga de la página. Pero visto que no se puede hacer no habrá mas remedio que dejarlo como está.

Muchas gracias por su respuesta haron.

Un saludo
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 00:24.