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

    Check-out MySQL Query này và sau đó tôi sẽ cho bạn thấy những gì tôi thực sự muốn nó để làm ...MySQL "Hoặc" Điều kiện

    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'"); 
    

    Vấn đề với nó là tôi muốn nó luôn luôn phù hợp với e-mail. Trong trường hợp này (ví dụ) nếu ngày bằng $Date_SixDaysAgo thì nó sẽ được chọn từ truy vấn ngay cả khi $Email không bằng cột email. Vì vậy, trong ngắn hạn, tôi muốn email luôn bằng cột email và nếu truy vấn kéo một ngày bằng $Daye_TwoDaysAgo hoặc $Date_ThreeDaysAgo v.v. nhưng không bằng email thì đừng kéo nó.

    Tôi đoán truy vấn của tôi sẽ trông loại như thế này, nhưng tôi khá chắc chắn nó sẽ không làm việc ..

    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

    ngoặc là bạn bè của bạn! – ChelseaStats

    Trả lời

    48

    Sử dụng dấu ngoặc đơn để nhóm các câu lệnh 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')"); 
    

    Bạn cũng có thể sử dụng 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

    Sử dụng dấu ngoặc:

    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' 
        ) 
    "); 
    

    Nhưng bạn Alsos nên có một cái nhìn tại các nhà điều hành IN. Vì vậy, bạn có thể nói ´date IN ('$ date1', '$ date2', ...) `

    Nhưng nếu bạn luôn có một tập hợp các ngày liên tục tại sao bạn không làm như sau cho phần ngày

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

    Hoặc có thể sử dụng toán tử BETWEEN. – liquorvicar

    0

    Quấn logic của bạn và trong ngoặc đơn, như thế này:

    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

    câu hỏi của bạn là về operator precedences trong mysql và Alex has shown you làm thế nào để "ghi đè" các ưu tiên với dấu ngoặc đơn.

    Nhưng trên một lưu ý phụ, nếu cột của bạn date là loại Date bạn có thể sử dụng MySQL's date and time functions để tìm nạp các bản ghi trong bảy ngày qua, như ví dụ:

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

    (hoặc có thể Curdate() thay vì Giờ())

    -4

    thử này

    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'"  
        ); 
    

    tôi có bị như thế này

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

    Bạn đã cân nhắc xóa câu trả lời này chưa? Bạn sẽ lấy lại danh tiếng đã mất của bạn. –

    Các vấn đề liên quan