2010-09-03 63 views
0

我正在我的網站上建立一個搜索功能,我有一些麻煩在SQL中定位錯誤。有四個SQL語句用於使用AND和OR關鍵字返回相同搜索的計數。第二組SQL語句根據當前搜索的頁碼返回AND的實際結果和OR搜索限制。錯誤在您的SQL語法 - 獲取此錯誤,無法確定錯誤的位置

下面我將顯示和count和and搜索的SQL函數。 其他兩個SQL語句的代碼完全相同,只使用OR而不是AND。

function _and_count($words) { 

    require_once("include/conn.inc.php"); 

    $arraysize = count($words); 

    $and_count_sql = "SELECT COUNT(DISTINCT tg_id) 
         FROM tg_keywords 
         WHERE tg_keyword="; 

    if ($arraysize > 1) { 
     foreach($words as $word){ 
      $count = 1; 
      if ($count == 1){ 
       $and_count_sql .= "'".$word."' AND "; 
      } 
      elseif ($count < $arraysize){ 
       $and_count_sql .= "tg_keyword='".$word."' AND "; 
      } 
      else { 
       $and_count_sql .= "'".$word."'"; 
      } 
      $count++; 
     } 

    } elseif ($words == 1) { 
     $and_count_sql .= "'".$words."'"; 
    } 

    $and_count_result = mysql_query($and_count_sql) 
     or die(mysql_error()); 

    return $and_count_result; 

} 


function _search_and($words, $startpos, $endpos) { 

    require_once("include/conn.inc.php"); 

    $arraysize = count($words); 

    $search_and_sql = "SELECT DISTINCT tg_id COUNT(*) AS nb 
         FROM tg_keywords 
         LEFT JOIN tg_info 
         ON tg_info.tg_id=tg_keywords.tg_id 
         WHERE tg_keyword="; 

    if ($arraysize > 1){ 
     foreach($words as $word) { 
      $count = 1; 
      if ($count == 1 && $count < $arraysize) { 
       $search_and_sql .= "'".$word."' AND "; 
      } elseif ($count == 1 && $count == $arraysize) { 
       $search_and_sql .= "'".$word."'"; 
      } elseif ($count < $arraysize) { 
       $search_and_sql .= "tg_keyword='".$word."' AND "; 
      } elseif ($arraysize == $count) { 
       $search_and_sql .= "'".$word."'"; 
      } 
      $count++; 
     } 
    } elseif ($arraysize == 1) { 
     $search_and_sql .= "'".$words."'"; 
    } else { 
     $search_and_sql .= "''"; 
    } 

    $search_and_sql .= "GROUP BY tg_id 
         ORDER BY nb DESC, tg_info.date_added ASC 
         LIMIT ".$endpos." OFFSET ".$startpos; 

    $search_and_result = mysql_query($search_and_sql, $link) 
     or die(mysql_error()); 

    $and_array = mysql_fetch_array($search_and_result); 

    return $and_array; 


} 

任何意見將不勝感激。 感謝 阿奇

+0

你會得到什麼錯誤? – dionyziz 2010-09-03 13:32:18

+1

什麼數據庫?顯示結果SQL String被創建。 – JeffO 2010-09-03 13:33:11

+0

爲什麼要用AND而不是IN? – XstreamINsanity 2010-09-03 13:41:12

回答

4
 $search_and_sql = "SELECT DISTINCT tg_id COUNT(*) AS nb

失蹤tg_id和計數之間的逗號。

其良好的做法,以顯示生成的查詢,即。 echo $ search_and_sql;之前mysql_query

+0

已發佈完全相同的答案,但3分鐘後;)刪除和+1向cichy – DmitryK 2010-09-03 13:38:05

+0

感謝您的意見。問題已修復,下次我一定會回覆查詢。乾杯夥計,阿奇 – archiebald 2010-09-03 14:01:52

1

您在每次循環迭代開始時設置$count = 1,然後測試$count == 1是否使您的SQL可能在最後有一個額外的AND。

0

它看起來像$計數始終爲1 foreach循環裏面,所以你結束了一個尾端和

+0

感謝您的建議,問題的解決,這是這個問題和上面的一個。只能勾選一個答案。乾杯,阿奇 – archiebald 2010-09-03 14:03:01

0

是不是有錯誤嗎?

SELECT DISTINCT tg_id COUNT(*) AS nb 

你應該有一個「」 tg_id和COUNT(*)

之間如果錯誤不會來到這裏,你可以請你的呼應SQL查詢,給我們造成的?

相關問題