오름차순 및 내림차순으로 다른 필드별로 데이터를 정렬하려고합니다.ORDER BY 필드 이름 만 다른 mysql 문 축소.
입력을 기반으로$stmt1 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field1 DESC");
$stmt2 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field1 ASC");
$stmt3 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field2 DESC");
$stmt4 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field3 ASC");
$stmt5 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field3 DESC");
$stmt6 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field3 ASC");
$stmt7 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field4 DESC");
$stmt8 = $po->prepare("SELECT * FROM tabname WHERE categ=:categ ORDER BY field4 ASC");
, 나는 오른쪽 문 및 바인딩을 선택하고 실행 :하지만 내가 가지고있는 4 개 분야에 대해 서로 다른 MySQL의 PDO 문 (8 개 쿼리가 총)을 가지고있다.
if ($sortcode == 1){
$stmt1->bindParam(':categ', $categ, PDO::PARAM_STR);
$stmt1->execute();
$fetched = $stmt1->fetchAll(PDO::FETCH_ASSOC);
} else if ($sortcode == 2){
$stmt2->bindParam(':categ', $categ, PDO::PARAM_STR);
$stmt2->execute();
$fetched = $stmt2->fetchAll(PDO::FETCH_ASSOC);
} else if ($sortcode == 3){
$stmt3->bindParam(':categ', $categ, PDO::PARAM_STR);
$stmt3->execute();
$fetched = $stmt3->fetchAll(PDO::FETCH_ASSOC);
}
//repeat the block 5 more times, for a total of 8
이것은 전혀 표시되지 않습니다. select 문은 필드와 desc/asc의 이름 만 다르므로 $sortcode
을 얻고 다음에 오는 코드를 압축하는 더 좋은 방법이 있습니까?
내가 더 구체적으로 질문을 할 수있을 것 같아요 : 필드 이름과 오름차순/동적으로 decs 바인딩하는 단일 문/단일 pdo 문을 수있는 방법이 있습니까?
+1 정렬 열과 열 번호를 쉽게 추가 할 수 있습니다. - yikes – Fedearne
이것은 좋은 생각입니다. ** 그러나 여전히 8 개의 다른 pdo 문이있는 큰 문제는 해결되지 않습니다. 그래서 각 옵션에 대해, 바인딩 시간에 관해서는, 나는 여전히 그 고유 명칭의 쿼리를 호출하고 바인드하여 실행해야합니다. 그래서 주 코드 (내가 가지고있는 8 블록)는 여전히 같고 줄어들지 않습니다. +1하지만 노력하고 있습니다. 정확히 내가 묻는 것은 아닙니다. – Chris
답장을 편집하여 문제가 실제로 어떻게 해결되는지 더 자세히 설명합니다. – novalis