2012-10-12 4 views
0

다음과 같은 코드를 사용하여 조건에 따라 DB 내용을 가져올 주 루프를 설정하는 것이 가장 중요합니다.PHP/MYSQL 쿼리 최적화

이 조건은 다음과 같습니다 : 우리가 카테고리를보고 있는지 여부 - 우리가 ID를보고 있는지 여부 - 우리가 어느 쪽을보고 있는지 여부 (앞 페이지) - 관리자 비밀번호/사용자 이름 조합은 (삭제/편집 목적으로) 사용됩니다.

$ 답장은 (우리가 ID를보고있는 경우) ID의 PARENT가 호출 된 모든 항목을 가져옵니다. $ quickinfo는 메타 태그 (제목, 키워드 등)를 설정하는 데 사용됩니다.

내 현재 (현재) 질문 :이게 효율적입니까? 그렇지 않은 경우 왜 아닙니다. 또한

$selection = "ID,CONTENT,IP,SUBJECT,CATEGORY,APPROVED,DATE,PARENT, 
       PASSWORD,USERNAME,THANKS,DISAPPROVE,IPS,BUMPS"; 

$id = strip_tags($id); 
$category = strip_tags($category); 
$threads = mysql_query("SELECT COUNT(*) FROM $board") or die(); 
list($threadsTotal) = mysql_fetch_row($threads); 
$threadsTotal_pages = ceil($threadsTotal/$POSTSPERPAGE); 
$threadsPage = intval(@$_GET["page"]); 

if (0 == $threadsPage) 
{ 
    $threadsPage = 1; 
} 

$threadsStart = $POSTSPERPAGE * ($threadsPage - 1); 
$threadsMax = $POSTSPERPAGE; 

if ($category > "" && $id == "" 
    && $passw != <ONE MISTAKE HERE> $adminPass 
    && $username != <ANOTHER MISTAKE HERE> $adminID) 
{ 
    $threads = mysql_query("SELECT $selection FROM $board WHERE PARENT=0 
          AND CATEGORY='$category' 
          ORDER BY ID DESC LIMIT $threadsStart, $threadsMax"); 
} 

if ($category == "" && $id == "" && 
    $passw !== <NOT EQAULS DOES NOT REQUIRE TWO EQUAL SIGNS AGAIN> 
    $adminPass && $username != <AND AGAIN> $adminID) 
{ 
    $threads = mysql_query("SELECT $selection FROM $board WHERE PARENT=0 
           ORDER BY ID DESC LIMIT $threadsStart, $threadsMax"); 
} 

// PLEASE CHECK THE NOT EQUALS FUTHER ON.... 

if ($id > "" && $passw != $adminPass && $username != $adminID) 
{ 
    $threads = mysql_query("SELECT $selection FROM $board WHERE PARENT=0 
          AND ID=$id LIMIT 1"); 

    $quickinfo = mysql_query("SELECT COUNT(*) FROM $board") or die(); 
    $quickinfo = mysql_query("SELECT ID,CONTENT,SUBJECT,CATEGORY,USERNAME FROM 
           $board WHERE PARENT=0 AND ID=$id LIMIT 1"); 

    $replies = mysql_query("SELECT COUNT(*) FROM $board") or die(); 
    $replies = mysql_query("SELECT $selection FROM $board WHERE PARENT=$id 
          ORDER BY ID ASC"); 

    while (list($ID, $CONTENT, $SUBJECT, $CATEGORY, $USERNAME) = 
      mysql_fetch_row($quickinfo)) 
    { 
     $threadID = $ID; 
     $threadContent = $CONTENT; 
     $threadSubject = $SUBJECT; 
     $threadCategory = $CATEGORY; 
     if ($USERNAME > "") 
     { 
      $threadAuthor = $USERNAME; 
     } 
     elseif ($USERNAME == "") 
     { 
      $threadAuthor = "Anonymous"; 
     } 
    } 

} // That is the end of your if 

if ($passw == $adminPass && $username == $adminID) 
{ 
    $threads = mysql_query("SELECT $selection FROM $board ORDER 
          BY APPROVED DESC LIMIT $threadsStart, 
                $threadsMax"); 
} 
+0

스페이스 바 및 몇 가지 전략적 Enter 키를 사용하여 코드를 더 읽기 쉽게 만들 수 있습니까? 즉 가로 스크롤 막대를 사용하면 읽을 수 있습니다. –

+0

원작보다 약간 나을 것이기를 바랍니다. – Matt

답변

1

Matt- 포맷 코드를 사용하는 것이 발견을위한 '==!' '-!'

또한 당신이 mysqli 또는 POD를 사용하는 것이 좋습니다. PHP 용 mysql 라이브러리는 사용되지 않습니다.

+0

추 신 : 형식이 완벽하지 않습니다. –

+0

틀림없이 문제가 생기면 나는 결석 할 수 있습니다. (어떤 다른 곳에서 다른 코드를보고, 다른 곳에서는 사용하고 있습니다! ==가 나타납니다.) – Matt

+0

잠재적 인 문제점을 발견하고 형식을 지정하기 위해 +1을주십시오. –

0

하나의 문제가 있다고 생각합니다. 난 당신이 정말이

if ($category > "" && $id == "" 
    && $passw != <ONE MISTAKE HERE> $adminPass 
    && $username != <ANOTHER MISTAKE HERE> $adminID) 

{

이이

if ($category > "" && $id == "" 
    && ($passw != <ONE MISTAKE HERE> $adminPass 
    || $username != <ANOTHER MISTAKE HERE> $adminID)) 

{

또는 아마도, 다른를 할 수 있습니다되고 싶은 생각 || 다른 & & 대신에, 나는 카테고리와 ID의 논리를 완전히 확신하지 못한다.

그렇지 않으면 매우 효율적인 설정처럼 보이는 페이지에서 한 번만 DB를 쿼리합니다.

+0

관리자 ID와 관리자 패스가 조합되어 있기 때문에 둘 다 존재하고 올바른지 확인하고자합니다.그렇지 않으면 누구든지 관리자 ID를 로그인 자격 증명으로 사용할 수 있으며 "오, 안녕하세요, 관리자는 무엇을하고 싶습니까?"라고 말합니다. 이 경우 두 매개 변수가 모두 충족되는지 확인하고 있습니다. 이제 관리자/암호 조합을위한 루프가 있으므로 위의 항목을 제외하고 싶습니다 (그렇지 않으면 두 번 표시 될 것입니다). – Matt

+0

맞기 때문에 둘 중 하나라도 일치하지 않으면 일치해야합니다. 그러지 마,하지 마! –