itsource

형제 결과에서 매개 변수에 대한 행 값을 일치시키는 방법은 무엇입니까?

mycopycode 2022. 9. 11. 17:41
반응형

형제 결과에서 매개 변수에 대한 행 값을 일치시키는 방법은 무엇입니까?

모든 결과를 얻기 위해 루프를 실행하는 DB 콜이 2개 있습니다.

우선 저는 올해와 관련된 결과를 얻고 있습니다.

둘째, 전년도(-1)에 대한 결과를 얻을 수 있습니다.

어떻게 하면 두 번째 루프 출력의 달을 첫 번째 루프에서 같은 달에 맞출 수 있을까요?

public function cargovolumes_cy() {
    global $wpdb;

    $cargodb = new $wpdb('root', 'devpw', 'exdb', 'localhost');

    $currentmonthtxt = date('M');

    $currentyear = date('Y');

    $cargovolume_cy = array();

    foreach($cargodb->get_results(
        "
        SELECT    *, SUM(tonneCount)
        FROM      volumes
        WHERE year = $currentyear
        GROUP BY terminal, year, month
        ORDER BY month desc, year desc
        "
    )  as $key => $row) {
        $tonnages = $row->tonneCount;
        $terminal = $row->terminal;
        $year = $row->year;
        $month = $row->month;
        $cargovolume_cy[] = 
        '<h4 class="cv-terminal-title">'.$terminal.' </h4>'. 
        '<div class="cargovolumes_cy">'.
        '<div class="cargovolumes_cy-dates cvrow-'.$month.'-'.$year.'">'.
        '<span class="cy-month"> '.$month.' </span>'. 
        '<span class="cy-year"> '.$year.' </span></div>'. 
        '<div class="cy-year-bar"><div class="cy-tonnage-bar">&nbsp;</div>'.
        '<span class="cy-tonnage" value="'.$tonnages.'"> '.$tonnages.' </span></div>'.
        '</div>';
    };

    return $cargovolume_cy;

}

public function cargovolumes_ly() {
    global $wpdb;

    $cargodb = new $wpdb('root', 'devpw', 'exdb', 'localhost');

    // $stable = $shipdb->get_results("SELECT * FROM volumes", ARRAY_A);

    $currentmonthtxt = date('M');

    $currentyear = date('Y');

    $cargovolume_ly = array();

    foreach($cargodb->get_results(
        "
        SELECT    *, SUM(tonneCount)
        FROM      volumes
        WHERE year = $currentyear -1
        GROUP BY terminal, year, month
        ORDER BY month desc, year desc
        "
    )  as $key => $row) {
        $tonnages = $row->tonneCount;
        $terminal = $row->terminal;
        $year = $row->year;
        $month = $row->month;
        $cargovolume_ly[] = 
        '<div class="cargovolumes_ly">'. 
        '<div class="cargovolumes_ly-dates">'.
        '<span class="ly-month"> '.$month.' </span>'. 
        '<span class="ly-year"> '.$year.' </span></div>'. 
        '<div class="ly-year-bar"><div class="ly-tonnage-bar">&nbsp;</div>'.
        '<span class="ly-tonnage" value="'.$tonnages.'"> '.$tonnages.' </span></div>'.
        '</div>';
    };

    return $cargovolume_ly;

}

그 결과 월과 연도가 일치하는 2개의 요소가 출력됩니다.대신 첫 번째 출력에서는 가장 최근 달이 나오고 두 번째 출력에서는 한 해의 마지막 달이 나옵니다.

컨테이너 요소는 다음과 같습니다.

@for ($i = 0; $i < min(count($cargovolumes_cy), count($cargovolumes_ly)); $i++)
<div class="page_cargovolumes-info_grid-cy_item">
  {!! $cargovolumes_cy[$i] !!}
  {!! $cargovolumes_ly[$i] !!}
</div>
@endfor

너무 복잡하게 만드는 거 아니야?

2개의 SQL 쿼리를 차례로 실행하는 대신 단말기당, 매월 레코드를 하나씩 생성하는 SQL 쿼리를 구축할 수 있습니다.이것에 의해, 금년도와 작년도의 볼륨의 합계가, 2개의 별도 열에 표시됩니다.이것을 조건부 집약이라고 부릅니다.

고려사항:

SELECT 
    terminal, 
    month, 
    SUM(CASE WHEN year = YEAR(CURDATE())     THEN tonneCount ELSE 0 END) tonnage_cy,
    SUM(CASE WHEN year = YEAR(CURDATE()) - 1 THEN tonneCount ELSE 0 END) tonnage_ly
FROM volumes
WHERE year >= YEAR(CURDATE()) - 1
GROUP BY terminal, month
ORDER BY month desc

주의:

  • SELECT *와 함께GROUP BY권장되지 않으며 오래된 MySQL 버전 이외의 버전에서는 오류가 발생할 수 있습니다.반환할 컬럼을 명시적으로 나열하여 모든 비집약 컬럼을 에 추가하는 것이 좋습니다.GROUP BYclause)를 참조해 주세요.
  • sql에서 직접 올해를 계산할 수 있습니다.YEAR(CURDATE())PHP를 사용하는 대신date()기능.

이와 달리 어레이에 몇 개월을 저장할 수 있습니다.

$cargovolume_cy["$terminal-$month-$year"] = 
        '<h4 class="cv-terminal-title">'.$terminal.' </h4>'. 
        '<div class="cargovolumes_cy">'.
        '<div class="cargovolumes_cy-dates cvrow-'.$month.'-'.$year.'">'.
        '<span class="cy-month"> '.$month.' </span>'. 
        '<span class="cy-year"> '.$year.' </span></div>'. 
        '<div class="cy-year-bar"><div class="cy-tonnage-bar">&nbsp;</div>'.
        '<span class="cy-tonnage" value="'.$tonnages.'"> '.$tonnages.' </span></div>'.
        '</div>';

그런 다음 컨테이너 요소에 다음과 같이 적습니다.

@foreach ($cargovolumes_cy as $key_1 => $volume_cy)
    @foreach ($cargovolumes_ly as $key_2 => $volume_ly)
        @if (explode('-', $key_1)[1] == explode('-', $key_2)[1])
            <div class="page_cargovolumes-info_grid-cy_item">
              {!! $volume_cy !!}
              {!! $volume_ly !!}
            </div>
        @endif
    @endforeach
@endforeach

언급URL : https://stackoverflow.com/questions/57749965/how-to-match-row-value-as-variable-for-parameter-in-sibling-results

반응형