Foros del Web » Programando para Internet » PHP »

Consulta multiple a db

Estas en el tema de Consulta multiple a db en el foro de PHP en Foros del Web. Tengo una base de datos la cual tiene varias tablas y en concreto quiero efectuar una consulta a dos de ellas a la misma vez ...
  #1 (permalink)  
Antiguo 10/11/2006, 08:56
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 4 meses
Puntos: 0
Consulta multiple a db

Tengo una base de datos la cual tiene varias tablas y en concreto quiero efectuar una consulta a dos de ellas a la misma vez para llamar a una utilizo:

Código PHP:
mysql_query("SELECT * FROM nota WHERE `set` = 'sajaxb2' AND `Disponible` = 'si' ORDER BY `order` ASC"
Como tendria que hacer para en esta misma instruccion consultar a la tabla nota y la tabla varios teniendo en cuanta que las dos tienen la misma estructura de campos ???
__________________
:) Fernando Dichiera (:
[email protected]
  #2 (permalink)  
Antiguo 10/11/2006, 09:36
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Pues lo que podrías hacer es poner la tabla seguida del campo que quieres mostrar o comparar. Mira este ejemplo:
Código PHP:
mysql_query"SELECT tabla1.campo1, tabla1.campoN, tabla2.campo1, tabla2.campoN FROM tabla1, tabla2 WHERE tabla1.campo1 = 'sajaxb2' AND tabla1.campoN = 'si' AND tabla1.campo1 = tabla2.campo1  ORDER BY `order` ASC" ); 
Espero que con el ejemplo te haya quedado claro. Como vez tiene que haver un campo de relacion entre tabla1 y tabla2 que fue lo que se especifico en: tabla1.campo1 = tabla2.campo1. Espero también haberme dado a entender. Suerte
  #3 (permalink)  
Antiguo 10/11/2006, 11:15
 
Fecha de Ingreso: septiembre-2005
Ubicación: Ourense
Mensajes: 25
Antigüedad: 18 años, 7 meses
Puntos: 1
La solución más sencilla si no necesitas saber de que tabla es cada fila del resultado sería usar UNION para unir dos consultas sql:

Código:
     $sql_1 = "SELECT * FROM clientes_locales WHERE nombre = 'Pepe'";
     $sql_2 = "SELECT * FROM clientes_extranjeros WHERE nombre = 'Pepe'";
     $sql = $sql_1." UNION ".$sql_2;

     // la consulta $sql devolvera las filas o tuplas de las tablas clientes_locales y clientes_extranjeros donde el nombre sea Pepe

Espero te sirva. Saludos.
  #4 (permalink)  
Antiguo 10/11/2006, 12:50
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 4 meses
Puntos: 0
Algo falta o esta mal ...

tengo
Código PHP:
$r mysql_query("SELECT * FROM nota, varios WHERE nota.set = 'sajaxb2' AND nota.Disponible = 'si' AND nota.set = varios.set ORDER BY `order` ASC");
$numero 1;
while(
$rw mysql_fetch_array($r))
{
// aqui imprimo cada uno de las consulta en una tabla
$numero ++;
}

y me genera el siguiente error Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\appserv\www\t8\guion1024-bloque2.php on line 319 haciendo referencia a la linea del mysql_fetch_array obviamente...

tambien pasa lo mismo si hago...

Código PHP:
$sql_1 "SELECT * FROM nota WHERE `set` = 'sajaxb2' AND `Disponible` = 'si' ORDER BY `order` ASC";
$sql_2 "SELECT * FROM varios WHERE `set` = 'sajaxb1' AND `Disponible` = 'si' ORDER BY `order` ASC";
$r $sql_1" UNION ".$sql_2 
supongo que la consulta esta mal pero no se porque ???
__________________
:) Fernando Dichiera (:
[email protected]
  #5 (permalink)  
Antiguo 11/11/2006, 09:28
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Y si nos muestras que error es el que genera mysql exactamente. Has tu consulta de esta forma:
Código PHP:
$r mysql_query("tu_consulta") or die( mysql_error() ); 
Como vez sólo tienes que agregar la sentencia or die( mysql_error() ); hazlo y nos muestras que error te sale haora. Suerte
  #6 (permalink)  
Antiguo 11/11/2006, 12:10
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 4 meses
Puntos: 0
Aclarando...

A ver si puedo aclarar el panorama, tengo lo siguiente... una base de datos llamada "noticiero" con varias tablas entre ellas la llamada "nota" y otra llamada "varios" son iguales a no ser por un campo !!! la estructura es la siguiente:

tabla nota
----------
id
Nombre_nota
Responsable
Camara
Fecha_Make
Entradilla
Scrip
TEXTOS
Pie
Fecha_EDIT
Fecha_Air
Soporte
Comienza
Termina
Dura
Video_Audio
Estado
Editor
Edicion
Disponible
set
item
order
presenta

la tabla "varios" es igual pero con un campo mas llamado "color"

el problema es el siguiente... necesito hacer una consulta a la base de datos de las dos tablas a la vez para luego hacer via ajax un update, ese no es el problema, pero les muestro como lo hago !!!!

Código PHP:
<?
mysql_connect
('localhost''fermdp''gio'); mysql_select_db('noticiero'); function parse_data($data)
{
  
$containers explode(":"$data);
  foreach(
$containers AS $container)
  {
      
$container str_replace(")"""$container);
      
$i 0;
      
$lastly explode("("$container);
      
$values explode(","$lastly[1]);
      foreach(
$values AS $value)
      {
        if(
$value == '')
        {
            continue;
        }
        
$final[$lastly[0]][] = $value;
        
$i ++;
      }
  }
    return 
$final;
}

function 
update_db($data_array$col_check)
{

  foreach(
$data_array AS $set => $items)
  {
     
$i 0;
     foreach(
$items AS $item)
     {
       
$item mysql_escape_string($item);
       
$set  mysql_escape_string($set);
       
       
mysql_query("UPDATE nota SET `set` = '$set', `order` = '$i'  WHERE `item` = '$item' $col_check");
       
mysql_query("UPDATE varios SET `set` = '$set', `order` = '$i'  WHERE `item` = '$item' $col_check2");
       
$i ++;
     }
  }
}

require_once(
'sajax.php');
sajax_init();

function 
sajax_update($data)
{
  
$data parse_data($data);
  
update_db($data"AND (`set` = 'sajaxb2' OR `set` = 'sajax2')");
  return 
'y';
}

sajax_export("sajax_update");
sajax_handle_client_request();
?>
El TEMA viene aqui...originalmente para consultar y mostrar una SOLA TABLA usaba...

Código PHP:
<? $r mysql_query("SELECT * FROM nota WHERE `set` = 'sajaxb2' AND `Disponible` = 'si' ORDER BY `order` ASC");
$numero 1;
while(
$rw mysql_fetch_array($r))
{... 
Y MI CODE PARA MOSTRAR LOS REGISTROS DESEADOS !!!
pero... al querer hacer una consulta "DOBLE" no logro que me muestre los registros que quiero !!!

BUAAAAAAA !!!!!!

Lo que quiero que me consulte y muestre es lo siguiente "TODOS LOS REGISTROS DE LAS DOS TABLAS DONDE LOS CAMPOS "set" DE AMBAS SEAN = "sajaxb2" Y LOS CAMPOS DISPONIBLES DE AMBAS = a "si" ORDENADAS POR el CAMPO "order" QUE EN AMBAS TIENEN NUMEROS QUE NO SE REPITEN !!! POR LO QUE ASUME EN PRINCIPIO NO HABRIA PROBLEMA !!!!

Lo que he usado para esta consulta es todas las siguientes opciones probando de a una y ninguna de ellas me devolvio el resultado deseado !!!!

Código PHP:
$r mysql_query("SELECT * FROM nota, varios WHERE nota.set = 'sajaxb2' AND nota.Disponible = 'si' AND nota.set = varios.set AND nota.Disponible = varios 

Disponible ORDER BY `order` ASC"
);

$r mysql_query("SELECT * FROM nota, varios WHERE nota.set = 'sajaxb2' AND nota.Disponible = 'si' AND nota.set = varios.set ORDER BY nota.order ASC") or 

die( 
mysql_error() ) ;

$r mysql_query("SELECT * FROM nota WHERE `set` = 'sajaxb2' AND `Disponible` = 'si' ORDER BY `order` ASC");

$sql_1 "SELECT * FROM nota WHERE `set` = 'sajaxb2' AND `Disponible` = 'si' ORDER BY `order` ASC";
$sql_2 "SELECT * FROM varios WHERE `set` = 'sajaxb1' AND `Disponible` = 'si' ORDER BY `order` ASC";
$r $sql_1" UNION ".$sql_2 
ovbiamente luego las recorro con un while para mostrarlas...

$numero = 1;
while($rw = mysql_fetch_array($r))
{...

....
$numero ++;
}

los errores que he tenido fueron desde no mostrar nada a mostrarme resultados duplicados, triplicados, etc...

Espero que me puedan ayudar a encontrar un "FILTRO" para dicha consulta a la db

Desde ya ENORMEMENTE AGRADECIDO por su ayuda !!!
__________________
:) Fernando Dichiera (:
[email protected]
  #7 (permalink)  
Antiguo 11/11/2006, 18:45
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 4 meses
Puntos: 0
Alguna idea?
__________________
:) Fernando Dichiera (:
[email protected]
  #8 (permalink)  
Antiguo 12/11/2006, 19:15
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 4 meses
Puntos: 0
entre los errors esto es lo que pasa...

con la consulta $r = mysql_query("SELECT * FROM nota, varios WHERE nota.set = 'sajaxb2' AND nota.Disponible = 'si' AND nota.set = varios.set ORDER BY nota.order ASC") or die( mysql_error() ) ; me devuelve SOLO los record de la tabla varios, REPETIDOS seis veces !!!

con $r = mysql_query("SELECT * FROM nota, varios WHERE nota.set = 'sajaxb2' AND nota.Disponible = 'si' AND nota.set = varios.set AND nota.Disponible = varios Disponible ORDER BY `order` ASC"); me dice "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\appserv\www\t8\guion1024-bloque2.php on line 319"

con $sql_1 = "SELECT * FROM nota WHERE `set` = 'sajaxb2' AND `Disponible` = 'si' ORDER BY `order` ASC";
$sql_2 = "SELECT * FROM varios WHERE `set` = 'sajaxb1' AND `Disponible` = 'si' ORDER BY `order` ASC";
$r = $sql_1. " UNION ".$sql_2 ;


me dice "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\appserv\www\t8\guion1024-bloque2.php on line 319
" ovbiamente en todos los casos haciendo referencia a la linea de code en donde se hace la llamada a la db

Estare eternamente agradecido si alguien me puede aclarar un poco el tema ...
__________________
:) Fernando Dichiera (:
[email protected]
  #9 (permalink)  
Antiguo 14/11/2006, 22:10
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 4 meses
Puntos: 0
a alguien le paso lo mismo, tienen alguna idea de como solucionarlo o explicacion ?
__________________
:) Fernando Dichiera (:
[email protected]
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 19:13.