하나의 쿼리에서 달성 될 수 있지만 꽤 클 것이고 두 배가 될 것입니다. 하나의 쿼리에서 이와 같은 작업을 수행하는 가장 이상적인 유일한 시간은 "하나의 관계 있음"관계가있는 경우입니다. 즉, 항목은 간단한 참여로 수행 할 수있는 하나의 효과를 가지며 항목은 하나의 프로그램 만 반환합니다.
간단한 사례를 들려주세요. 당신은 2 개의 항목을 가지고 있으며 각각은 많은 관계를 가진 3 개의 효과를 가지고 있습니다.
SELECT item.*, effect.*
FROM item
JOIN item_effect ON item.id = item_effect.item_id
JOIN effect ON effect.id = item_effect.effect_id
반환은있을 수 :
item1 effect1
item1 effect2
item1 effect3
item2 effect2
item2 effect3
item2 effect4
그런 다음 다시 함께 통해 루프 그룹의 모든 항목에있을 것입니다. 요구 사항과 수정 자의 관계로 인해 쿼리는 점점 커지지 만 여전히 공정하게 구성됩니다.
일부 유형의 ORM (Object Relational Mapping)을 사용할 수 있습니다. 그러면 코드를 더 읽기 쉽게 만들 수 있습니다. Kohana의 ORM 구문을 사용합니다.
$items = ORM::factory('item')->find_all();
foreach($items as $item) {
$effects = $item->effects->find_all();
$bonuses = $item->bonuses->find_all();
$requirements = $item->requirement->find_all();
}
그러나 100 개 항목의 예제에서는 301 개의 검색어를 제안했습니다.
웹 페이지에 이것을 표시하는 경우 페이지 번호 매김 (1-20의 100을 표시)은 해당 숫자를 낮 춥니 다.
사용하는 방법은 상황에 따라 다릅니다. 고려할 사항 :
이
들이 정말 한 번
100 개 항목을 참조해야합니까 사용됩니다 얼마나 자주
- 그들이 한 모든 관계를 참조해야합니까 (그 효과를 볼 항목을 클릭 등)
왜 JOINS를 사용하지 않으시겠습니까? 테이블이 너무 큽니까? 'SELECT * FROM items JOIN이 아이템에 영향을줍니다 .ID 아이템에 대한 JOIN 보너스 .ID 항목에 대한 JOIN 요구 사항.ID ORDER BY items.date DESC LIMIT 100' – criticus
항목별로 여러 가지 효과, 보너스 및 필수 항목이 필요합니다. 내 이해는 모든 항목에 대해 1 효과, 1 보너스 및 1 요청을 반환합니다. 나는 틀린가? – Ryan
모든 효과, 보너스, 선택한 항목에 대한 요구 사항을 반환합니다. 그리고 효과, 보너스 또는 요구 사항이없는 항목이 있다면 LEFT JOIN – criticus