2016-07-22 3 views
0

가 나는 다음 날을 얻을 수 있도록 설계되었습니다 쿼리MySQL의 쿼리는

SELECT DISTINCT 
    Products.Product_name 
    FROM Order_details 
    INNER JOIN Products 
    ON Products.Product_codenumber = Order_details.Product_codenumber 
    INNER JOIN Orders 
    ON Order_details.Order_ID = Orders.Order_ID 
    INNER JOIN Customers 
    ON Orders.Customer_ID = Customers.Customer_ID 
    INNER JOIN Discount_cards 
    ON Discount_cards.Phone_number = Customers.Login 
    WHERE Orders.Status_ID = '5' 
    AND (DATE(Orders.Time) BETWEEN '$start_date' AND '$end_date') 

전 범위 또는 주문 정보와 할인 카드 사용자가 주문한 제품이 정지. 내가 처음 썼을 때 제대로 작동하는 것처럼 보였지만, 최근에는 얼어 버린다고 들었습니다. 이유는 모르겠습니다. 나는 그걸 가지고 놀려고했는데 날짜 범위를 추가하거나 단일 날짜 검색 조건을 추가하면 멈추는 것처럼 보입니다 (PHPMyAdmin에서 'Loading'팝업이 영원히 표시 될 수 있음). 그 외에는 실행하는데 약 1 초가 걸립니다.

Here's what EXLAIN gives me.

+0

왜 외부 쿼리에서 distinct를 사용하고 있습니까? – Avi

+0

에서 복제본이 발생할 가능성이 있다고 생각되는 내부 쿼리에서 시도하십시오. 거기에서 열을 가져 오지 않을 때 고객 및 Discount_Card 테이블에 합류하는 이유는 무엇입니까? – Avi

+0

PHP를 사용하여 어떻게 실행합니까? –

답변

0

그래, 분명히 내부 Discount_cards에 대한 가입 밖으로 던지기 및 수정 사항에 WHERE와 함께이 문제를 그것을 대체 : 그 동결 비록 일어 났습니까 왜

SELECT DISTINCT 
    Products.Product_name 
    FROM Order_details 
    INNER JOIN Products 
    ON Products.Product_codenumber = Order_details.Product_codenumber 
    INNER JOIN Orders 
    ON Order_details.Order_ID = Orders.Order_ID 
    INNER JOIN Customers 
    ON Orders.Customer_ID = Customers.Customer_ID 
    WHERE 
    Customers.Login IN (
     SELECT 
     Phone_number 
     FROM Discount_cards 
     ) 
    AND Orders.Status_ID = '5' 
    AND (DATE(Orders.Time) BETWEEN '$start_date' AND '$end_date') 

가 궁금는 설명 주시면 감사하겠습니다.