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

Extraer datos no coincidentes

Estas en el tema de Extraer datos no coincidentes en el foro de Mysql en Foros del Web. Tras haber mirado en el foro y no conseguir solucion planteo esta pregunta. Estoy haciendo una web para poder alquilar un alojamiento, tengo dos tablas, ...
  #1 (permalink)  
Antiguo 11/04/2010, 20:50
 
Fecha de Ingreso: enero-2004
Ubicación: Granada
Mensajes: 81
Antigüedad: 20 años, 3 meses
Puntos: 0
Extraer datos no coincidentes

Tras haber mirado en el foro y no conseguir solucion planteo esta pregunta.

Estoy haciendo una web para poder alquilar un alojamiento, tengo dos tablas, una donde describo las habitaciones y otra donde tengo la ocupacion

En la tabla habitaciones tengo:
codigo, nombre, descripcion, ocupacion; codigo es primary key

En la tabla ocupacion tengo:
id, id_item, the_date, state; id es primary key e id_item es index

La relacion entre las tablas se hace con codigo = id_item

Lo que me gustaria es poder recuperar las habitaciones libres para unas determinadas fechas con una sola llamada es decir:
Código:
SELECT codigo,nombre0, capacidad   
FROM elementos LEFT JOIN ocupacion ON codigo = id_item  
WHERE id_item Is Null AND the_date >='".$datosres["res_finicio"]."'  AND the_date <'".$datosres["res_fsalida"]."' 
ORDER BY nombre0
Pero no me recupera las habitaciones libres, me recupera solo las ocupadas....

Agradezco sus posibles ayudas.
__________________
VitoVi.com
Responsable Programación Web
  #2 (permalink)  
Antiguo 12/04/2010, 00:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Extraer datos no coincidentes

Prueba alguna de estas dos a ver si te funciona. La
segunda, creo, sería más rápida. Yo no las he probado.
Código MySQL:
Ver original
  1. SELECT codigo,nombre0, capacidad FROM elementos WHERE codigo NOT IN  (SELECT codigo FROM elementos INNER JOIN ocupacion ON codigo = id_item  
  2. WHERE the_date between @variablefechainicio AND @variablefechafin) ORDER BY nombre0
Código MySQL:
Ver original
  1. SELECT codigo, nombre0, capacidad FROM elementos WHERE codigo LEFT JOIN  (SELECT codigo FROM elementos INNER JOIN ocupacion ON codigo = id_item  
  2. WHERE the_date between @variablefechainicio AND @variablefechafin)T1 ON elementos.codigo=T1.codigo WHERE T1.codigo IS NULL ORDER BY nombre0
  #3 (permalink)  
Antiguo 12/04/2010, 03:19
 
Fecha de Ingreso: enero-2004
Ubicación: Granada
Mensajes: 81
Antigüedad: 20 años, 3 meses
Puntos: 0
Respuesta: Extraer datos no coincidentes

Hola jurena, lo priemro agradecer tu rapida respuesta, la primera opcion que me das no me la deja mi administrador del server pues dice que consumimos muchos recursos, ademas de la demora que experimenta la web, estamos eliminando todos los subselect, la tabla ocupacion puede crecer mucho y si el negocio va bien podriamos hablar de unos 80.000 registros con lo que no es muy recomendable.

El segundo select que me indicas falla debido a que pones el left join sobre el WHERE y el LEFT JOIN, por lo que he leido va en el FROM.

De todos modos muchas gracias por tu interes...
__________________
VitoVi.com
Responsable Programación Web
  #4 (permalink)  
Antiguo 12/04/2010, 09:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Extraer datos no coincidentes

Perdona el error, causado por el corta y pega. Prueba así:
Código MySQL:
Ver original
  1. SELECT codigo, nombre0, capacidad FROM elementos LEFT JOIN  (SELECT codigo FROM elementos INNER JOIN ocupacion ON codigo = id_item  
  2. WHERE the_date between @variablefechainicio AND @variablefechafin)T1 ON elementos.codigo=T1.codigo WHERE T1.codigo IS NULL ORDER BY elmentos.nombre0

Etiquetas: extraer
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 07:08.