Mysql query returning incorrectly

Discussion in 'MySQL' started by cesarcesar, Jun 11, 2007.

  1. #1
    The following MySql Query is not retuning correctly. It is returning dates outside the given range. Why? Thanks.

    
    SELECT distinct
    sale_type_landsale.sale_type_landsale_id
    ,sale_type_landsale.sale_date,sale_type_landsale.city,sale_type_landsale.name,sale_type_landsale.sale_price,sale_type_landsale.number_lots
    FROM
    sale_type_landsale
    Left Outer Join connector_sale ON sale_type_landsale.sale_type_landsale_id = connector_sale.ref_id
    Left Outer Join sale ON connector_sale.sale_id = sale.sale_id
    Where 
    sale_type_landsale.sale_date >= '2006-01-01' 
    AND sale_type_landsale.sale_date <= '2007-06-08' 
    AND sale_type_landsale.city ='4' 
    OR sale_type_landsale.city ='13'  
    AND connector_sale.ref = 'sale_type_landsale' 
    AND sale.sale_archive <> 1
    
    Code (markup):
     
    cesarcesar, Jun 11, 2007 IP
  2. jmafonseca

    jmafonseca Peon

    Messages:
    195
    Likes Received:
    5
    Best Answers:
    0
    Trophy Points:
    0
    #2
    Group the AND's and OR's

    Try this one :

    
    SELECT distinct
    sale_type_landsale.sale_type_landsale_id
    ,sale_type_landsale.sale_date,sale_type_landsale.city,sale_type_landsale.name,sale_type_landsale.sale_price,sale_type_landsale.number_lots
    FROM
    sale_type_landsale
    Left Outer Join connector_sale ON sale_type_landsale.sale_type_landsale_id = connector_sale.ref_id
    Left Outer Join sale ON connector_sale.sale_id = sale.sale_id
    Where 
    (sale_type_landsale.sale_date >= '2006-01-01' 
    AND sale_type_landsale.sale_date <= '2007-06-08' )
    
    AND ( sale_type_landsale.city ='4' 
    OR sale_type_landsale.city ='13'  )
    AND connector_sale.ref = 'sale_type_landsale' 
    AND sale.sale_archive <> 1
    
    Code (markup):
     
    jmafonseca, Jun 11, 2007 IP
  3. smithy

    smithy Guest

    Messages:
    134
    Likes Received:
    6
    Best Answers:
    0
    Trophy Points:
    0
    #3
    think you might need some brackets there, i'm not sure exactly what you want your query to return but 'or' takes precedence over 'and'.

    maybe this what you want ?

    SELECT distinct
    sale_type_landsale.sale_type_landsale_id
    ,sale_type_landsale.sale_date,sale_type_landsale.city,sale_type_landsale.name,sale_type_landsale.sale_price,sale_type_landsale.number_lots
    FROM
    sale_type_landsale
    Left Outer Join connector_sale ON sale_type_landsale.sale_type_landsale_id = connector_sale.ref_id
    Left Outer Join sale ON connector_sale.sale_id = sale.sale_id
    Where sale_type_landsale.sale_date >= '2006-01-01'
    AND sale_type_landsale.sale_date <= '2007-06-08'
    AND (sale_type_landsale.city ='4' OR sale_type_landsale.city ='13' )
    AND connector_sale.ref = 'sale_type_landsale'
    AND sale.sale_archive <> 1
     
    smithy, Jun 11, 2007 IP
  4. cesarcesar

    cesarcesar Peon

    Messages:
    188
    Likes Received:
    1
    Best Answers:
    0
    Trophy Points:
    0
    #4
    thanks jmafonseca, that worked.
     
    cesarcesar, Jun 11, 2007 IP
  5. cesarcesar

    cesarcesar Peon

    Messages:
    188
    Likes Received:
    1
    Best Answers:
    0
    Trophy Points:
    0
    #5
    solution:
    
    SELECT distinct
    sale_type_landsale.sale_type_landsale_id
    ,sale_type_landsale.sale_date,sale_type_landsale.city,sale_type_landsale.name,sale_type_landsale.sale_price,sale_type_landsale.number_lots
    FROM
    sale_type_landsale
    Left Outer Join connector_sale ON sale_type_landsale.sale_type_landsale_id = connector_sale.ref_id
    Left Outer Join sale ON connector_sale.sale_id = sale.sale_id
    Where ( sale_type_landsale.sale_date >= '2006-01-01' AND sale_type_landsale.sale_date <= '2007-06-08' )
    AND ( sale_type_landsale.city ='4' OR sale_type_landsale.city ='13' )
    AND connector_sale.ref = 'sale_type_landsale' 
    AND sale.sale_archive <> 1
    
    Code (markup):
     
    cesarcesar, Jun 11, 2007 IP
  6. jmafonseca

    jmafonseca Peon

    Messages:
    195
    Likes Received:
    5
    Best Answers:
    0
    Trophy Points:
    0
    #6
    Sure, glad it worked ;)

    (smithy suggested the same and i'd guess it works too.)
     
    jmafonseca, Jun 11, 2007 IP
  7. link_dev

    link_dev Peon

    Messages:
    292
    Likes Received:
    4
    Best Answers:
    0
    Trophy Points:
    0
    #7
    Will not the above query return results from June 09th aswell?

    The query should be
    sale_type_landsale.sale_date < '2007-06-08 23:59:59'
    link_dev
     
    link_dev, Jun 11, 2007 IP
  8. cesarcesar

    cesarcesar Peon

    Messages:
    188
    Likes Received:
    1
    Best Answers:
    0
    Trophy Points:
    0
    #8
    link_dev your good. o yeah real good. thanks I'll make the change
     
    cesarcesar, Jun 11, 2007 IP
  9. jmafonseca

    jmafonseca Peon

    Messages:
    195
    Likes Received:
    5
    Best Answers:
    0
    Trophy Points:
    0
    #9
    Ooops it's a DATETIME, not a DATE field?
     
    jmafonseca, Jun 11, 2007 IP
  10. link_dev

    link_dev Peon

    Messages:
    292
    Likes Received:
    4
    Best Answers:
    0
    Trophy Points:
    0
    #10
    As long as you get the right results....:)
     
    link_dev, Jun 11, 2007 IP