簡體   English   中英

PHP / MYSQL查詢優化

[英]PHP/MYSQL Query Optimization

我有以下代碼塊可以做以下幾件事之一,最重要的是設置主循環,從中可以獲取數據庫內容(取決於條件)。

這些條件是:我們是否在查看類別-我們是否在查看ID-我們是否在都不查看(首頁)-是否使用了管理員密碼/用戶名組合(用於刪除/編輯)。

$ replies正在抓取(如果我們正在查看一個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");
 }

Matt-重新格式化的代碼,還發現您對'!-'使用'!=='

另外,您應該考慮使用mysqli或POD。 不推薦使用PHP的mysql庫。

我想我看到一個問題。 我相信你真的想要這個

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的邏輯,而不是另一個&&。

否則,您只能在頁面上查詢一次數據庫,這似乎是一個非常有效的設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM