Ver Mensaje Individual
  #3 (permalink)  
Antiguo 08/04/2011, 08:30
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Combinacion de tablas.

Hola soy_rebeca:

Cita:
No sabia que el OR si no lo ponemos entre parentesis, no funciona. Una cosa a aprender.
MUCHO OJO: No es correcto que digas que si al OR no lo pones entre paréntesis no funciona, eso podría parecer el motivo de que tu consulta no funcione, pero tiene una razón que no implica sintaxis. El problema es con la JERARQUÍA DE OPERADORES. Si hubieras revisado la documentación te podrías haber dado cuenta que las sentencias AND se ejecutan ANTES que las sentencias OR (checa la liga)

http://dev.mysql.com/doc/refman/5.0/...recedence.html

Es lo mismo que en matemáticas, si pongo

Código:
5+2*3
el resultado es 11 (no 21 como tal vez podrías suponer) ya que la multiplicación se evalúa antes que la suma. Para obtener 21 deberías hacer poner

Cita:
(5+2)*3
Es decir, con los paréntesis OBLIGAS a que se ejecute primero la suma y después la multiplicación.

Otra recomendación, en este foro hemos insistido muchas veces en utilizar JOIN's en lugar de listar tus consultas en el FROM y hacer las uniones en el WHERE, ya esta última forma de unión es muy lenta. Tu consulta por lo tanto podría quedar así:

Código MySQL:
Ver original
  1. INNER JOIN copciones on copciones.idficha=fichas.idficha
  2. fichas.alojamiento='3' and
  3. fichas.ealojamiento='3' and
  4. fichas.plazas='8' and
  5. (copciones.idopcion=13 or copciones.idopcion=2 or copciones.idopcion=5)
  6. GROUP BY fichas.idficha

O utilizando una sentencia IN

Código MySQL:
Ver original
  1. INNER JOIN copciones on copciones.idficha=fichas.idficha
  2. fichas.alojamiento='3' and
  3. fichas.ealojamiento='3' and
  4. fichas.plazas='8' and
  5. copciones.idopcion in (13, 2, 5)
  6. GROUP BY fichas.idficha

Si notas con los paréntesis OBLIGO A QUE TODOS LOS OR SE EVALUEN AL MISMO TIEMPO QUE LOS AND.

Finalmente, en la medida de lo posible evita hacer consultas select *, es mejor listar todos los campos que vas a necesitar (aquí por ejemplo se duplicaría el campo idFicha, pues pondría los de ambas tablas). También afecta el rendimiento de las consultas.

Estas son algunas mejores prácticas que deberías seguir, pero finalmente no dejan de ser recomendaciones. La decisión es tuya.

Saludos
Leo.