쿼리문을 조건에 따라 추가하여 값을 출력하고 싶습니다
본문
지금 값을 꺼내기 위한 쿼리문을 작성 중 입니다.
예를 들어
<?php
include_once('./_common.php');
$table=$_POST['tbl'];
$diseaseTarget=$_POST['diseaseTarget'];
$validityTarget=$_POST['validityTarget'];
$drugTarget=$_POST['drugTarget'];
$companyTarget=$_POST['companyTarget'];
$speciesTarget=$_POST['speciesTarget'];
if($table === "FISH_DRUG"){
$sql = "SELECT DISTINCT DRUG_NAME
FROM ".$table.", ADMINISTRATION_METHOD, FISH_DISEASE, ACTIVE_INGREDIENTS_BY_DRUG, ACTIVE_INGREDIENT, MANUFACTURING_COMPANY, FISH_SPECIES
WHERE FISH_DRUG.DRUG_NAME LIKE '%".$drugTarget."%'
AND FISH_DRUG.DRUG_CODE = ADMINISTRATION_METHOD.DRUG_CODE ";
if(!($diseaseTarget === "")){
$sql .= "AND FISH_DISEASE.DISEASE_CODE = ADMINISTRATION_METHOD.DISEASE_CODE
AND FISH_DISEASE.DISEASE_NAME_KR = '".$diseaseTarget."'";
}
if(!($validityTarget === "")){
$sql .= "AND FISH_DRUG.DRUG_CODE = ACTIVE_INGREDIENTS_BY_DRUG.DRUG_CODE
AND ACTIVE_INGREDIENT.INGREDIENT_CODE = ACTIVE_INGREDIENTS_BY_DRUG.ACTIVE_INGREDIENT_CODE
AND ACTIVE_INGREDIENT.INGREDIENT_NAME = '".$validityTarget."'";
}
if(!($companyTarget === "")){
$sql .= "AND FISH_DRUG.MANUFACTURING_COMPANY_CODE = MANUFACTURING_COMPANY.COMPANY_CODE
AND MANUFACTURING_COMPANY.COMPANY_NAME = '".$companyTarget."'";
}
if(!($speciesTarget === "")){
$sql .= "AND FISH_SPECIES.SPECIES_CODE = ADMINISTRATION_METHOD.SPECIES_CODE
AND FISH_SPECIES.SPECIES_NAME = '".$speciesTarget."'";
}
$result = sql_query($sql);
이런식으로 조건을 주어 조건의 쿼리문을 추가하고 싶은데 이렇게 값을 내려고 하니 모든 테이블을 추가해서 그런지 속도가 엄청 느려졌습니다 ㅠㅠ
from 다음에 있는 테이블도 if 조건에 해당될 때 테이블을 추가하는 형식으로 하고 싶은데
$table .= ""FISH_DISEASE";
이렇게 넣으니 값이 나오지 않아 모두 나열하여 사용했는데 속도때문이라도 테이블 값을 추가해야할 것 같습니다!
어떻게 하면 좋을까요 ,,,ㅠㅠㅠ
이게 POST로 넘어오는 변수여서 값을 추가할 수 없는건지,,,,
아니면 따로 테이블 변수를 하나 더 추가하여 추가되는 테이블만을 따로 관리하고 싶은데 어떻게 하면 좋을까요?ㅠㅠ
!-->답변 2
올려주신 글만 봐서는 from table1,table2..... 이렇게 나열되어 있으니 느려지는 건 당연한 듯 싶은데.
왜 저렇게 해야만 하는 상황인지 이해가 안 가네요. table간 join할 키도 없는지.
근본 해결은 DB를 변경해야 할 듯 한데 해당 업무를 알 수 없으니 DB구조를 어떻게 하라고 충고 드리기도 어렵네요,
일반적인 Tip만 드린다면 distinct보다는 group by 쓰시는 게 속도는 나을 겁니다,
그리고 like 검색을 인덱스 적용 되도록 '검색어%' 로 가능한지도 살펴 보세요
join을 사용하실 때는
index 관계를 잘 살펴 봐야 합니다.
답변을 작성하시기 전에 로그인 해주세요.