현재 레거시 애플리케이션을 리팩터링하고 프레임 워크 1.12로 조각을 한 곡씩 변환 중입니다.다음의 MySQL select를 개선하려면 어떻게해야합니까?
나는 이것을 zend db로 변환하는 방법에 관해서 머리를 쓰다듬어보고 있는데, 이것은 하나의 쿼리로 수행 할 수있는 방법일까요?
지금은 폴더 목록을 먼저 가져온 다음 폴더 당 추가 쿼리를 실행하는 것을 볼 수 있습니다. 하나의 쿼리로 실행하면 성능이 향상 될 것입니다. 그렇습니까?
$folders_query = DB::Query("select * from contacts_folders order by sort_order, name");
while($folders = DB::FetchArray($folders_query)){
$counts_total = DB::QueryOne("SELECT count(cm.messages_id) AS total
FROM contacts_basics cb, contacts_messages cm
WHERE cb.contacts_id = cm.contacts_id
AND cm.folders_id = '" . $folders['folders_id'] . "'
AND cm.status = '1'
AND cm.mark = '0'");
if ($counts_total >0){
$folders_name = '<strong>' . $folders['name'] . ' (' . $counts_total . ')</strong>';
} else {
$folders_name = $folders['name'];
}
echo '<li><a href="messages.php?fID=' . $folders['folders_id'] . '">';
echo $folders_name;
echo '</a></li>';
}
. . 즐거움. 그 이유는 원래 원래 쿼리의 순서대로 조인을 작성했기 때문입니다. 그런 다음 조인의 오른쪽 필드가 'cm'이 아니라 'cb'라는 테이블임을 알게되었습니다. 한 가지 해결책은'오른쪽 외부 조인 '이었을 지 모르지만'왼쪽 외부 조인'(습관)을 선호합니다. 구문을 완전히 고치지는 않았을 것입니다. –