그래서 id
라는 필드 types
을 호출 (다른 테이블에 연결하는 정수를 저장 type
라는 필드를했다 (person
를 호출 할 수 있습니다) 나는 두 개의 테이블 하나를 가지고 있습니다 말할 수 있습니다.?크고 작거나 작은 검색어 및 더 많은 검색어?
큰 하나의 질의 타입의 모든 값들을 저장하고
person
표 위에 루핑 우리가types
쿼리에서 얻은 배열에서 값을 잡는.person
잡아 값에서 모든 루프types
type
을person
쿼리에 결합하려면JOIN
쿼리를 사용하십시오.
주 : 예에서 I는 (분명히) $db
같은 일부 가짜 변수를 사용했다. 그냥 ... CodeIgniter의 데이터베이스 클래스 또는 뭔가 같은이 생각
예제 코드 BP # 1 :
<?php
$types = $this->db->query("SELECT * FROM `types`")->result_array();
$query = $this->db->query("SELECT * FROM `person`");
foreach($query->result_array() as $value)
{
$type = $types[$value['type']];
}
의
예제 코드 BP # 2 : (캐싱 형태의 추가 수정 됨)
<?php
$query = $this->db->query("SELECT * FROM person");
$types = [];
foreach($query->result_array() as $value)
{
if(empty($types[$value['type']]))
{
$types[$value['type']] = $this->db->query("SELECT * FROM types WHERE id = {$value['type']} LIMIT 1")->row_array();
}
$type = $types[$value['type']];
}
의
예제 코드 BP # 3 : (NB : 나는 ... 전혀 그렇게 쿼리에서 오류를 용서하고, 그것을 수정 주시기 바랍니다 JOIN
를 사용하지 않은)
<?php
$query = $this->db->query("SELECT * FROM person JOIN types ON person.type = types.id");
foreach($query->result_array() as $value)
{
// type is already there for us in $value
}
참고 : person
및 types
모두 100,000 개가 넘는 행이 예상됩니다.
100k + 행은 큰 문제가 아닙니다. 나를 얻는 것은 정규화 된 테이블처럼 들릴 수있는 "유형"이 "인물"만큼 많은 행을 가질 수 있다는 것입니다. 일반적으로 'INNER JOIN'은 올바른 키 등을 사용하여 찾을 수있는 가장 효율적인 방법입니다. 귀하의 질문은 솔직하게 너무 모호하여 실제 답변을 얻지 못합니다. –
경험상의 원칙 : 데이터베이스가 당신을 위해 그것을 할 수 있다면, 데이터베이스가 당신을 위해 그것을하도록하십시오. – CBroe