2010-03-31 5 views
0

말, 나는 23-03-,이 두 테이블 ....이 mysql 쿼리를 최적화하는 방법이 있습니까?

Table 1 : Hotels 
    hotel_id hotel_name 
     1   abc 
     2   xyz 
     3   efg 

Table 2 : Payments 
    payment_id  payment_date  hotel_id  total_amt comission 
     p1   23-03-2010   1   100   10 
     p2   23-03-2010   2   50   5 
     p3   23-03-2010   2   200   25 
     p4   23-03-2010   1   40   2 

지금, 나는 특정 날짜 (예를 들어 감안할 때 두 테이블

  1. 에서 다음과 같은 세부 정보를 얻을 필요가 있어요 2010)는 해당 날짜에 지불 한 호텔의 총액 합계입니다. 23-03-2010은이 호텔의 이름

샘플 출력은 다음과 같다 따라 주문한 날짜가

  • 모든 행 ... 테이블의 샘플 위

    +------------+------------+------------+---------------+ 
    | hotel_name | date  | total_amt | commission | 
    +------------+------------+------------+---------------+ 
    | * abc  | 23-03-2010 |  140 |  12  | 
    +------------+------------+------------+---------------+ 
    |+-----------+------------+------------+--------------+| 
    || paymt_id | date  | total_amt | commission || 
    |+-----------+------------+------------+--------------+| 
    || p1  | 23-03-2010 |  100 |  10  || 
    |+-----------+------------+------------+--------------+| 
    || p4  | 23-03-2010 |  40  |  2  || 
    |+-----------+------------+------------+--------------+| 
    +------------+------------+------------+---------------+ 
    | * xyz  | 23-03-2010 |  250 |  30  | 
    +------------+------------+------------+---------------+ 
    |+-----------+------------+------------+--------------+| 
    || paymt_id | date  | total_amt | commission || 
    |+-----------+------------+------------+--------------+| 
    || p2  | 23-03-2010 |  50  |  5  || 
    |+-----------+------------+------------+--------------+| 
    || p3  | 23-03-2010 |  200 |  25  || 
    |+-----------+------------+------------+--------------+| 
    +------------------------------------------------------+ 
    

    그 인쇄해야합니다 ...

    아이디어는 각 호텔의 통합 된 세부 사항을 먼저 보여 주며, 호텔 이름 옆에있는 '*'를 클릭하면 지불 세부 사항이 표시됩니다 ... 그러나 일부 jquery로 수행 할 수 있습니다 .. !!! 테이블 자체는 php로 생성 될 수 있습니다 ...

    지금 당장 저는 호텔 이름으로 그룹화 된 금액과 수수료의 합계를 얻기 위해 두 가지 별도의 쿼리를 사용하고 있습니다. 다음은 테이블에 해당 날짜가있는 각 항목의 개별 행을 가져 오는 것입니다. 물론 sum() 계산을위한 레코드를 그룹화하면 금액의 합계가있는 각 호텔에 대해 하나의 행만 반환되기 때문에 ...

    단일 쿼리로 두 쿼리를 결합 할 수있는 방법이 있습니까? 더 최적화 된 방법으로 작업을 수행 할 수 있습니다. ??

    희망은 내가 분명히 존재하고 .. 시간 내 주셔서 감사 및 응답 ...

    편집 : 합계()

     SELECT DATE_FORMAT($payments.payment_date, '%d-%m-%Y %T') as payment_date, $payments.payment_id AS payment_id, $payments.payment_amount AS payment_amount, $payments.agent_commision AS commision, $payments.comm_percentage AS percentage, $hotels.hotel_name AS hotel SUM($payments.payment_amount) AS tot_amt SUM($payments.agent_commision) AS tot_ag_comsn FROM $payments JOIN $hotels ON $payments.hotel_id = $hotels.hotel_id WHERE DATE_FORMAT(payment_date,'%d-%m-%Y') = '$date_report' GROUP BY $payments.hotel_id ORDER BY $payments.payment_date ASC 

  • 을 얻기 위해 추가 된 쿼리 너무

    1. 쿼리

    2. 개별 행을 가져 오도록 쿼리

      
      SELECT DATE_FORMAT($payments.payment_date, '%d-%m-%Y %T') as payment_date, 
            $payments.payment_id AS payment_id, 
            $payments.payment_amount AS payment_amount, 
            $payments.agent_commision AS commision, 
            $payments.comm_percentage AS percentage, 
            $hotels.hotel_name AS hotel 
      FROM $payments 
      JOIN $hotels 
      ON $payments.hotel_id = $hotels.hotel_id 
      WHERE DATE_FORMAT(payment_date,'%d-%m-%Y') = '$date_report' 
      GROUP BY $payments.payment_date 
      ORDER BY $payments.payment_date ASC 
      

      나는 두 개의 별도의 임시 테이블에 두 개의 질의들에 의해 반환 된 행을 추가 한 다음 위의 그림과 같이 테이블을 인쇄 할 PHP를 사용하여 ...

    편집 2 : 그리고 누군가를 제안하는 경우도 감사 이 게시물의 더 나은 제목 ...)

    +0

    게시 하시겠습니까? – Xorlev

    +0

    @xorlev : 게시물을 편집하여 쿼리를 추가해도 ... 감사합니다 ... – SpikETidE

    답변

    0

    이것은 보고서 작성자의 도메인 또는 프로그래밍 언어의 동등한 논리입니다.

    +0

    예 ... 물론이 구조체를 사용하여 테이블을 인쇄하는 것은 물론 프로그래밍 언어의 논리 도메인입니다. 테이블에 인쇄해야하는 세부 정보는 단일 쿼리로 검색 할 수 있습니다 .... – SpikETidE

    관련 문제