Foros del Web » Programando para Internet » PHP »

Consultando 2 veces con IN (SELECT ....

Estas en el tema de Consultando 2 veces con IN (SELECT .... en el foro de PHP en Foros del Web. Hola gente !!! Tengo esta consulta en Mysql ... ("SELECT * FROM clientes WHERE cod_cli between $desde and $hasta AND cod_cli IN(SELECT cod_cli FROM pedidos) ...
  #1 (permalink)  
Antiguo 13/05/2009, 11:54
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 9 meses
Puntos: 8
Consultando 2 veces con IN (SELECT ....

Hola gente !!!

Tengo esta consulta en Mysql ...

("SELECT * FROM clientes WHERE cod_cli between $desde and $hasta AND cod_cli IN(SELECT cod_cli FROM pedidos)

y necesito saber como se puede agregar otro IN(SELECT cod_cli FROM presup) ???

Gracias, Ricardo !!!
__________________
Mail: [email protected]
  #2 (permalink)  
Antiguo 13/05/2009, 12:26
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 9 meses
Puntos: 8
Respuesta: Consultando 2 veces con IN (SELECT ....

La respuesta es :
Código:
("SELECT * FROM clientes WHERE cod_cli between $desde and $hasta 
AND cod_cli IN(SELECT cod_cli FROM pedidos)
AND cod_cli IN(SELECT cod_cli FROM presup)
Esa consulta me da de resultado todos los clientes entre $desde y $hasta, y que esten en pedidos y en presup.

Como se puede hacer para que me de todos los clientes entre $desde y $hasta, pero que esten tanto pedidos O en presup ...

Saludos, Ricardo !!!
__________________
Mail: [email protected]
  #3 (permalink)  
Antiguo 13/05/2009, 12:28
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consultando 2 veces con IN (SELECT ....

SELECT * FROM clientes WHERE cod_cli between $desde and $hasta
AND (cod_cli IN(SELECT cod_cli FROM pedidos)
OR cod_cli IN(SELECT cod_cli FROM presup))
  #4 (permalink)  
Antiguo 13/05/2009, 12:32
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consultando 2 veces con IN (SELECT ....

Otro in al mismo cod_cli?

Prueba esto:

Código mysql:
Ver original
  1. SELECT * FROM clientes WHERE
  2. cod_cli between $desde and $hasta
  3. cod_cli IN(SELECT cod_cli FROM pedidos
  4. SELECT cod_cli FROM presup)

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 14/05/2009, 00:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consultando 2 veces con IN (SELECT ....

Creía que se trataba de un problema de uso de AND y OR, pero si se trata de la consulta en sí, me quedo con la de huesos52, aunque la que propuse también funcione, pero aparte de ser menos elegante comprueba dos veces los números que están en las dos tablas, algo que no ocurre en la propuesta por huesos52 gracias al UNION. Yo me quedo con la de huesos52.

Última edición por jurena; 14/05/2009 a las 08:17
  #6 (permalink)  
Antiguo 14/05/2009, 05:19
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 9 meses
Puntos: 8
Respuesta: Consultando 2 veces con IN (SELECT ....

Gracias por sus respuestas !!!

Vamos con la de huesos52, me da bien el resultado con respecto a los clientes, pero cuando voy mostrar los datos de los pedidos o presupuestos, solo me da los clientes que tienen ped y pre, los que tienen ped solo o pre solo, no me muestra los datos ...

La consulta la muestra asi :

COD-NOMBRE CLIENTE
PED - 0021 - 13/05/2009
0583 - ITEM1
PRE - 0001 - 13/05/2009
0584 - ITEM2
Este lo muestra porque tiene cargados PED y PRE ...
el resto solo me muestra el nombre y codigo ...

Que habra que modificar ?

Saludos, Ricardo !!!
__________________
Mail: [email protected]
  #7 (permalink)  
Antiguo 14/05/2009, 06:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consultando 2 veces con IN (SELECT ....

No te entendí muy bien colote.

Como haces la segunda consulta? que sentencia usas?

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 14/05/2009, 06:40
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 9 meses
Puntos: 8
Respuesta: Consultando 2 veces con IN (SELECT ....

Te explico un poco mejor el tema ....
Tengo una tabla clientes, una pedidos y una presup ...las tablas se relacionan por cod_cli.

Y lo que quiero listar son los clientes que tengan ped o presup, o sea que existan en las tablas pedidos o presup ... Un cliente puede estar en pedidos y no en presup, o al reves, o en ambas ...

Si yo uso la consulta esa que me diste ... solo me lista solo los clientes que estan en las 2 tablas (ped y pre)

Saludos
__________________
Mail: [email protected]
  #9 (permalink)  
Antiguo 14/05/2009, 07:00
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consultando 2 veces con IN (SELECT ....

Colote... la consulta que te doy lista unos u otros. No se si la estes aplicando bien. Mira te pongo un pequeño bosquejo que hice para simular tu problema.

Código sql:
Ver original
  1. mysql> SELECT p.id,c.nombre FROM presupuesto p INNER JOIN clientes c USING(cedula);
  2. +------+--------+
  3. | id   | nombre |
  4. +------+--------+
  5. | 1    | jurena |
  6. | 2    | jurena |
  7. | 3    | jurena |
  8. | 4    | colote |
  9. | 5    | colote |
  10. +------+--------+
  11. 5 ROWS IN SET (0.00 sec)
  12.  
  13. mysql> SELECT p.id,c.nombre FROM pedidos p INNER JOIN clientes c USING(cedula);
  14. +------+--------+
  15. | id   | nombre |
  16. +------+--------+
  17. | 1    | colote |
  18. | 2    | huesos |
  19. +------+--------+
  20. 2 ROWS IN SET (0.00 sec)
  21.  
  22. mysql> SELECT *FROM clientes WHERE
  23. cedula IN(SELECT cedula FROM presupuesto
  24. UNION
  25. SELECT cedula FROM pedidos);
  26. +--------+--------+
  27. | cedula | nombre |
  28. +--------+--------+
  29. | 123    | jurena |
  30. | 124    | colote |
  31. | 125    | huesos |
  32. +--------+--------+
  33. 3 ROWS IN SET (0.00 sec)

Como puedes ver, en la tabla presupuesto no está huesos y en la tabla pedidos no está jurena y colote está en ambas. Cuando se aplica el union muestra los 3 clientes.

Es esto lo que necesitas?
Perdón por usar sus nombres... jejeje
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 14/05/2009, 07:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consultando 2 veces con IN (SELECT ....

Yo también me he perdido. Quieres que aparezca en las dos tablas (presupuesto, pedidos) o con que aparezca en una te basta.

Última edición por jurena; 14/05/2009 a las 08:37
  #11 (permalink)  
Antiguo 14/05/2009, 08:55
Avatar de colote  
Fecha de Ingreso: julio-2008
Ubicación: Rosario - Santa Fe - Argentina
Mensajes: 729
Antigüedad: 15 años, 9 meses
Puntos: 8
Respuesta: Consultando 2 veces con IN (SELECT ....

Hola gente !!! Gracias a uds lo pude resolver !!!
Me quedo asi !!!! Les dejo el codigo completo para que lo vean

Código:
$pagina=1;
$cont=0;

$clientes=mysql_query("SELECT * FROM clientes WHERE 
cod_cli BETWEEN $desde AND $hasta 
AND
cod_cli IN(SELECT cod_cli FROM pedidos
UNION ALL
SELECT cod_cli FROM presup)",$conexion);

while($cli=mysql_fetch_array($clientes)){

?>

<table>
	<tr><td class='l1' colspan='6'><b><?php echo "(".$cli['cod_cli'].")"?> - <?echo $cli['razon_soc']?></b></td></tr>
</table>
<?php
$cont++;   // INCREMENTO PARA EL TITULO CLIENTE


/////////////// C O M I E N Z A   P E D I D O S //////////
$pedidos=mysql_query("SELECT * FROM pedidos where cod_cli=$cli[cod_cli]",$conexion);

while($ped=mysql_fetch_array($pedidos)){

$fec_ped = explode("-", $ped['fecha_ped']);

?>

<table>
<tr><td class='l1' colspan='6'><?php echo $ped['tipo'] ?> - <?php echo $ped['codigo'] ?> - <?echo "$fec_ped[2]/$fec_ped[1]/$fec_ped[0]"?></td></tr>
</table>
<?php
$subpedidos=mysql_query("SELECT * FROM sub_pedidos as sped
inner join items as it on sped.cod_item=it.cod_item
where cod_pedido=$ped[codigo]
order by sped.fecha_ent",$conexion);

while($sped=mysql_fetch_array($subpedidos)){
$fec_ent_ped = explode("-", $sped['fecha_ent']);
?>
<table>
<tr>
<td class="l2"><?echo $sped['cod_item']?> - <?echo $sped['nombre_item']?></td>
<td class="l3"><?echo $sped['cantp']?></td>
<td class="l3"><?echo $sped['cant_ent']?></td>
<td class="l3"><?echo $sped['cant_rest']?></td>
<td class="l4"><?echo "$fec_ent_ped[2]/$fec_ent_ped[1]/$fec_ent_ped[0]";?></td>
</tr>
</table>
<!-- ////////// T E R M I N A  P E D I D O S///////////// -->

<?php
}
}
?>

<?php
/////////////// C O M I E N Z A  P R E S U P U E S T O S //////////
$presup=mysql_query("SELECT * FROM presup where cod_cli=$cli[cod_cli]",$conexion);

while($pre=mysql_fetch_array($presup)){

$fec_pre = explode("-", $pre['fecha_presup']);

?>

<table>
<tr><td class='l1' colspan='6'><?php echo $pre['tipo'] ?> - <?php echo $pre['codigo'] ?> - <?echo "$fec_pre[2]/$fec_pre[1]/$fec_pre[0]"?></td></tr>
</table>
<?php
$subpresup=mysql_query("SELECT * FROM sub_presup as spre
inner join items as it on spre.cod_item=it.cod_item
where cod_presup=$pre[codigo]
order by spre.fecha_ent",$conexion);

while($spre=mysql_fetch_array($subpresup)){
$fec_ent_pre = explode("-", $spre['fecha_ent']);
?>
<table>
<tr>
<td class="l2"><?echo $spre['cod_item']?> - <?echo $spre['nombre_item']?></td>
<td class="l3"><?echo $spre['cantp']?></td>
<td class="l3"><?echo $spre['cant_ent']?></td>
<td class="l3"><?echo $spre['cant_rest']?></td>
<td class="l4"><?echo "$fec_ent_pre[2]/$fec_ent_pre[1]/$fec_ent_pre[0]";?></td>
</tr>
</table>
<!-- ////////// T E R M I N A  P R E S U P U E S T O S ///////////// -->
<?php
}
} 


}  // cierre while clientes
ACA se ve como funciona ... por cada cliente muestra sus PED y PRE, solo en el caso del cliente 130 tiene PED y PRE ...

Saludos, y gracias !!!
__________________
Mail: [email protected]
  #12 (permalink)  
Antiguo 14/05/2009, 12:34
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consultando 2 veces con IN (SELECT ....

me alegro, colote,
pero elimina todo el código PHP y deja sólo la consulta SQL, y de ese modo estarás siguiendo las recomendaciones de este foro. En caso contrario, puede que los moderadores hasta eliminen el hilo. Gracias.
  #13 (permalink)  
Antiguo 16/05/2009, 20:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Consultando 2 veces con IN (SELECT ....

Tema trasladado desde MySQL

http://www.forosdelweb.com/f21/funci...-datos-413499/
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 16:58.