Foros del Web » Programando para Internet » PHP »

problema al tratar resultados de dos busquedas anidadas

Estas en el tema de problema al tratar resultados de dos busquedas anidadas en el foro de PHP en Foros del Web. Hola. Tengo un problema para resolver esto y php para mi es algo nuevo... tengo dos tablas. tabla1 = posts id pid bla bla bla..... ...
  #1 (permalink)  
Antiguo 03/08/2004, 18:24
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 14 años, 1 mes
Puntos: 4
problema al tratar resultados de dos busquedas anidadas

Hola.

Tengo un problema para resolver esto y php para mi es algo nuevo... tengo dos tablas.

tabla1 = posts
id pid bla bla bla.....
1 11
2 11
3 14
. .
12 14

tabla2 = contenido
id asunto texto
1 bla
2 bla
3 objetivo bla bla bla1
.
12 objetivo2 bla bla bla2
Lo que necesito es realizar una busqueda en pid=14 y que los resultados en este caso 3 y 12 ocuparlos para encontrar en la tabla2 el asunto y el texto para luego mostrarlos. (es la idea de un foro donde pid son subforos del mismo)
Código PHP:
la conexión al server y a la bd esta ok
viene dada en
$connexion

$sql 
'SELECT `pid`, `id` FROM `posts` WHERE 1 AND `pid` =14 ORDER BY `id` ASC LIMIT 0, 30'
$resultat_sql2 mysql_query($sql,$connexion); // realiza la busqueda en la tabla posts y encuentra todos los temas con pid = 14

$nombreligne mysql_num_rows($resultat_sql2); //numero de coincidencias



echo "<table><tr><th>asunto</th><th>texto</th></tr>"

$i 0;
while (
$i<$nombreligne)
{
$nom1 mysql_result($resultat_sql2,$i,"id"); //guardar los id de los resultados anteriores
echo $nom1;
$sql2 ='SELECT * FROM `contenido` WHERE id = $nom1 '
$resultat_sql mysql_query($sql2,$connexion); // se supone que hace la segunda busqueda para pedir los campos asunto y texto en la tabla 2 ordenados por id

$asunto mysql_result($resultat_sql0,"asunto"); //se supone que almacena el campo asunto
$ptext mysql_result($resultat_sql0,"texto"); //se supone que almacena el campo texto
$texto str_replace ("\r\n","</br> "$ptext); //reemplaza los retornos de carro por </br>

echo "<tr><td>$asunto</td><td>$texto</td></tr>"//pantalla
$i++; //bucle

me da un error
Warning: mysql_result(): supplied argument is not a valid MySQL result en las lineas de $asunto y $ptext

Lo que necesito es saber como puedo llevar los resultados de una tabla para realizar "con esos resultados" una busqueda en la otra tabla. lo demas esta bien, quizas es un error muy simple, ya que recien estoy manejando php con mysql. cualqier consejo en el codigo gracias.

Otra cosa, las tablas citadas en realidad son enormes, contienen mas de 3000 inserts o como se llamen es decir tocar las tablas no se puede hacer, quizas crear otra o algo mas simple en el codigo?

gracias

Última edición por Remsankar; 03/08/2004 a las 18:25
  #2 (permalink)  
Antiguo 03/08/2004, 21:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En general .. si haces:
Código PHP:
$asunto mysql_result($resultat_sql0,"asunto") or die (mysql_error()); 
podrás ver los errores de SQL o conexión que tengas ..

Pero, .. para lo que parece que estás haciendo .. tienes las funciones:

mysql_fetch_xxxx() que se usan bajo un bucle tipo while()

Ejemplo

Código PHP:
while (mysql_fech_array($resultado)){
echo 
$row['campo_nombre'];
echo 
$row['otro_campo_nombre'];

Eso sería un ejemplo para recorrer un resultado de una consulta SQL ejecutada que sabes que te va a devolver de 1 a N registros (por eso es bueno usar además mysql_num_rows() como ya usas para verificar si la consulta SQL arrojó 0 o más registros "record-set").

Puedes anidar estos bucles si obtienes mysql_query() diferenes.

Pero .. volviendo al problema principal .. Si tienes dos tablas que se relacionan bajo ese tabla1.pid=tabla2.id

Puedes hacer una sóla consulta SQL (eso sí . más compleja) para obtener los resulados que necesites tipo:

Código PHP:
$sql="SELECT tabla2.asunto,tabla2.texto FROM tabla1,tabla2 WHERE tabla1.pid=tabla2.id WHERE tabla1.pid='14'"
(y mejor todavía con un "JOIN" de SQL).

Así tan sólo harías:

Código PHP:
// conectas a tu BD.. etc ...

$resultado=mysql_query($sql) or die (mysql_error());
if (
mysql_num_rows >0){
  while (
$row=mysql_fetch_array($resultado)){
     echo 
$row['asunto']."<br>";
     echo 
$row['texto']."<br>";
  }
} else {
    echo 
"No hay resultados";

Un saludo,

Última edición por Cluster; 03/08/2004 a las 21:47
  #3 (permalink)  
Antiguo 04/08/2004, 03:43
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 14 años, 1 mes
Puntos: 4
He quedado pasmado con la respuesta


Muchas muchas gracias



Nota para otros usuarios:

todo esta perfecto salvo tabla1.pid=tabla2.id deberia ser asi tabla1.id=tabla2.id ya que las id son correlativas y la consulta del pid=14

Este sistema se puede aplicar a phpbb2, por ahi empece a hacer experimentos :)

Última edición por Remsankar; 04/08/2004 a las 04:51
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 17:52.