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

Ayuda con WHERE

Estas en el tema de Ayuda con WHERE en el foro de Mysql en Foros del Web. Hola tengo un problema , necesito hacer un WHERE pero con un parametro que desconozco y un Operador que desconozco. La question es que necesito ...
  #1 (permalink)  
Antiguo 05/02/2011, 11:22
 
Fecha de Ingreso: noviembre-2009
Mensajes: 76
Antigüedad: 14 años, 5 meses
Puntos: 2
Ayuda con WHERE

Hola tengo un problema , necesito hacer un WHERE pero con un parametro que desconozco y un Operador que desconozco.

La question es que necesito que ese where me compare 1 campo pero con 2 valores obligatorios , es decir por ejemplo tenemos

Tabla 1 - HOTEL ( Muestra codigo de hotel , y nombre de hotel)

Chotel | Nhotel

101 | Hotel1
102 | Hotel2
103 | Hotel3
104 | Hotel4

Tabla 2 - HOTEL_SERVICIO( Muestra codigo de hotel y codigo de servicios que tiene este )

Chotel | Cser

101 | 201
101 | 202
101 | 204
101 | 205
101 | 208
102 | 201
102 | 202
103 | 202
103 | 204
103 | 207
104 | 201
104 | 203

Digamos que la consulta que quiero hacer es una query que me de los codigos de todos los hoteles que tienen los servicios 202 Y 204 ( ambos , no los que tengan uno u otro , sino los 2 a la vez)

Lo he intentado asi , pero el resultado ha sido un desastre :

Código:
$hotconscod=mysql_query("SELECT Chotel FROM HOTEL_SERVICIO WHERE Cser ='203'");

$hotrescod=mysql_fetch_array($hotconscod);

$hotelescod=$hotrescod['Chotel'];

$hotcons=mysql_query("SELECT * FROM HOTEL_SERVICIO WHERE Cser ='204' AND Chotel ='$hotelescod'");
$hotres=mysql_fetch_array($hotcons);
$hoteles=$hotres['Chotel'];
Agradeceria alguna ayuda , ya que no se me ocurre como podria hacer que la consulta me de el resultado de Chotel que tenga los 2 Cser :S
  #2 (permalink)  
Antiguo 05/02/2011, 12:50
Avatar de alejandra_plana  
Fecha de Ingreso: noviembre-2010
Ubicación: Madrid
Mensajes: 25
Antigüedad: 13 años, 5 meses
Puntos: 2
Respuesta: Ayuda con WHERE

Es que debes incluir un while:

Código PHP:
$sql="select chotel from hotel_servicio where cserv=204";
$res=mysql_query($sql,$conexion);
while(
$reg=mysql_fetch_array($res))
{
    
$ssql="select chotel from hotel_serv where chotel=".$reg['chotel']." and cserv=202";
    
$sres=mysql_query($ssql,$conexion);
    if(
$sreg=mysql_fetch_array($sres))
    {
    echo 
$sreg['chotel'];
    }

espero que te funcione.
  #3 (permalink)  
Antiguo 05/02/2011, 12:55
Avatar de iwexcoder  
Fecha de Ingreso: mayo-2009
Ubicación: San Carlos de Bariloche
Mensajes: 404
Antigüedad: 15 años
Puntos: 16
Respuesta: Ayuda con WHERE

la consutal a la base de datos seria asi...

"select Chotel from HOTEL_SERVICIO where Cser='204' and Cser='202' group by Chotel";
__________________
iWexCoder.com - Programación - Desarrollo Movil - Programación Web www.iwexcoder.com
  #4 (permalink)  
Antiguo 08/02/2011, 12:48
 
Fecha de Ingreso: noviembre-2009
Mensajes: 76
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Ayuda con WHERE

Iwex esto no puede ser , ya que le estarias pidiendo que en 1 campo haya 2 valores diferentes , por lo tanto no te mostraria nada.

Encuanto a tu respuesta alejandra me temo que no la entiendo muy bien :s

si alguien me lo explica un poco mejor
  #5 (permalink)  
Antiguo 08/02/2011, 13:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ayuda con WHERE

Foxaurus, esta es una de las consultas que más se resiste al principio:
Código MySQL:
Ver original
  1. SELECT H.NHotel, COUNT(distinct Cser) num
  2.  FROM HOTEL H INNER JOIN `HOTEL_SERVICIO` HS
  3.  ON H.CHotel = HS.CHotel
  4.  WHERE HS.Cser IN(202, 204)
  5.  GROUP BY H.CHotel HAVING num = 2

Última edición por jurena; 08/02/2011 a las 14:23
  #6 (permalink)  
Antiguo 08/02/2011, 13:47
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Ayuda con WHERE

Hola Foxaurus:

Según los datos que pusiste de ejemplo y la explicación del problema, el resultado entonces tendrían que ser los hoteles 1 y 3 (o 101 y 103 por sus claves) ya que el hotel 2 posee sólo el servicio 202 pero no el 204 correcto???

Creo que la consulta quedaría más o menos así:

Código:
select * from HOTEL_SERVICIO where 
CHotel in (
select CHotel from HOTEL_SERVICIO where Cser = 202
) and Cser = 204
Lo único que te faltaría por hacer sería un INNER JOIN con la tabla HOTEL para obtener la descripción del Hotel.

Código MySQL:
Ver original
  1. mysql> create table HOTEL (Chotel int, Nhotel varchar(50));
  2. Query OK, 0 rows affected (0.08 sec)
  3.  
  4. mysql> insert into HOTEL values (101, 'Hotel1'), (102, 'Hotel2'), (103, 'Hotel3'
  5. ), (104, 'Hotel4');
  6. Query OK, 4 rows affected (0.05 sec)
  7. Records: 4  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> select * from HOTEL;
  10. +--------+--------+
  11. | Chotel | Nhotel |
  12. +--------+--------+
  13. |    101 | Hotel1 |
  14. |    102 | Hotel2 |
  15. |    103 | Hotel3 |
  16. |    104 | Hotel4 |
  17. +--------+--------+
  18. 4 rows in set (0.00 sec)
  19.  
  20. mysql> create table HOTEL_SERVICIO(Chotel int, Cser int);
  21. Query OK, 0 rows affected (0.09 sec)
  22.  
  23. mysql> insert into HOTEL_SERVICIO values (101, 201),(101, 202),(101, 204),(101,
  24. 205),(101, 208),(102, 201),(102, 202),(103, 202),(103, 204),(103, 207),(104, 201
  25. ),(104, 203);
  26. Query OK, 12 rows affected (0.03 sec)
  27. Records: 12  Duplicates: 0  Warnings: 0
  28.  
  29. mysql> select * from HOTEL_SERVICIO;
  30. +--------+------+
  31. | Chotel | Cser |
  32. +--------+------+
  33. |    101 |  201 |
  34. |    101 |  202 |
  35. |    101 |  204 |
  36. |    101 |  205 |
  37. |    101 |  208 |
  38. |    102 |  201 |
  39. |    102 |  202 |
  40. |    103 |  202 |
  41. |    103 |  204 |
  42. |    103 |  207 |
  43. |    104 |  201 |
  44. |    104 |  203 |
  45. +--------+------+
  46. 12 rows in set (0.00 sec)
  47.  
  48. mysql> select Chotel from HOTEL_SERVICIO where
  49.     -> CHotel in (
  50.     -> select CHotel from HOTEL_SERVICIO where Cser = 202
  51.     -> ) and Cser = 204;
  52. +--------+
  53. | Chotel |
  54. +--------+
  55. |    101 |
  56. |    103 |
  57. +--------+
  58. 2 rows in set (0.00 sec)
  59.  
  60. mysql>

EDITADO: No se me había ocurrido la solución que plantea el compañero jurena, pero me parece más optima que la que propuse. Enhorabuena


Saludos
Leo

Última edición por leonardo_josue; 08/02/2011 a las 13:53

Etiquetas: Ninguno
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 03:57.