php
  • mysql
  • select
  • condition
  • 2011-12-22 2 views 22 likes 
    22

    Dai un'occhiata a questo MySQL Query e poi vi farò vedere quello che voglio veramente fare ...MySQL "o" Condizione

    mysql_query(" 
    SELECT * FROM Drinks WHERE 
        email='$Email' 
        AND date='$Date_Today' 
        OR date='$Date_Yesterday' 
        OR date='$Date_TwoDaysAgo' 
        OR date='$Date_ThreeDaysAgo' 
        OR date='$Date_FourDaysAgo' 
        OR date='$Date_FiveDaysAgo' 
        OR date='$Date_SixDaysAgo' 
        OR date='$Date_SevenDaysAgo'"); 
    

    Il problema è che lo voglio per abbinare sempre il e-mail. In questo caso (ad esempio) se la data è uguale a $Date_SixDaysAgo, verrà selezionata dalla query anche se $Email non corrisponde alla colonna email.

    Così, in breve, voglio l'e-mail al uguale sempre la colonna di posta elettronica, e se la query tira una data che è uguale o $Daye_TwoDaysAgo$Date_ThreeDaysAgo ecc .. ma non è uguale l'e-mail, allora non tirarlo.

    Credo che la mia domanda apparirebbe un po 'come questo, ma sono abbastanza sicuro che non funziona ..

    mysql_query(" 
        SELECT * FROM Drinks WHERE 
        email='$Email' 
        AND date='$Date_Today 
        || $Date_Yesterday 
        || $Date_TwoDaysAgo 
        || $Date_ThreeDaysAgo 
        || $Date_FourDaysAgo 
        || $Date_FiveDaysAgo 
        || $Date_SixDaysAgo 
        || $Date_SevenDaysAgo'"); 
    
    +1

    parentesi sono tuo amico! – ChelseaStats

    risposta

    48

    utilizzare le parentesi per il gruppo OR.

    mysql_query("SELECT * FROM Drinks WHERE email='$Email' AND (date='$Date_Today' OR date='$Date_Yesterday' OR date='$Date_TwoDaysAgo' OR date='$Date_ThreeDaysAgo' OR date='$Date_FourDaysAgo' OR date='$Date_FiveDaysAgo' OR date='$Date_SixDaysAgo' OR date='$Date_SevenDaysAgo')"); 
    

    È inoltre possibile utilizzare IN

    mysql_query("SELECT * FROM Drinks WHERE email='$Email' AND date IN ('$Date_Today','$Date_Yesterday','$Date_TwoDaysAgo','$Date_ThreeDaysAgo','$Date_FourDaysAgo','$Date_FiveDaysAgo','$Date_SixDaysAgo','$Date_SevenDaysAgo')"); 
    
    10

    Utilizzare parentesi:

    mysql_query("SELECT * FROM Drinks WHERE email='$Email' AND 
        (date='$Date_Today' 
        OR date='$Date_Yesterday' 
        OR date='$Date_TwoDaysAgo' 
        OR date='$Date_ThreeDaysAgo' 
        OR date='$Date_FourDaysAgo' 
        OR date='$Date_FiveDaysAgo' 
        OR date='$Date_SixDaysAgo' 
        OR date='$Date_SevenDaysAgo' 
        ) 
    "); 
    

    Ma si dovrebbe alsos dare un'occhiata al l'operatore IN. In questo modo puoi pronunciare IN ('$ date1', '$ date2', ...) `

    Ma se hai sempre un set di giorni consecutivi, perché non fai quanto segue per la parte di data

    date <= $Date_Today AND date >= $Date_SevenDaysAgo 
    
    +2

    O possibilmente usare l'operatore BETWEEN. – liquorvicar

    0

    avvolgere la logica AND tra parentesi, in questo modo:

    mysql_query("SELECT * FROM Drinks WHERE email='$Email' AND (date='$Date_Today' OR date='$Date_Yesterday' OR date='$Date_TwoDaysAgo' OR date='$Date_ThreeDaysAgo' OR date='$Date_FourDaysAgo' OR date='$Date_FiveDaysAgo' OR date='$Date_SixDaysAgo' OR date='$Date_SevenDaysAgo')"); 
    
    4

    la tua domanda è circa il operator precedences in mysql e Alex has shown you come "override" la precedenza con parentesi.

    Ma su una nota a margine, se la vostra colonna date è del tipo Date è possibile utilizzare MySQL's date and time functions per recuperare i record degli ultimi sette giorni, come ad esempio

    SELECT 
        * 
    FROM 
        Drinks 
    WHERE 
        email='$Email' 
        AND date >= Now()-Interval 7 day 
    

    (o forse CURDATE() al posto di Now())

    -4

    provare questo

    mysql_query(" 
    SELECT * FROM Drinks WHERE 
        email='$Email' 
        AND date='$Date_Today' 
        OR date='$Date_Yesterday', '$Date_TwoDaysAgo', '$Date_ThreeDaysAgo', '$Date_FourDaysAgo', '$Date_FiveDaysAgo', '$Date_SixDaysAgo', '$Date_SevenDaysAgo'"  
        ); 
    

    il mio essere come questo

    OR date='$Date_Yesterday' oR '$Date_TwoDaysAgo'......... 
    
    +2

    Hai preso in considerazione l'eliminazione di questa risposta? Ritireresti la tua reputazione perduta. –

     Problemi correlati

    • Nessun problema correlato^_^