2012-10-31 4 views
1

나는이 코드에 대해 잠시 자신을 먹고 있습니다. 계속하기 전에 코드가 다시 작성되기를 기대하지 않고 그냥 잃어버린 길 때문에 올바른 방향으로 가도록 도와주세요. ^^검색 기능, mysql_num_rows 또는 mysql_fetch 행을 사용하는 MySQL 페이지 매김?

그래서 목록을 쿼리하는 데 사용하는 코드입니다. $ showitemsperlist 내 페이지 당 표시해야합니다 많은 항목을 보여줍니다 사용자 ..

if (isset($_GET["page"])) 
{ 
$page = $_GET["page"]; 
} 
else 
{ 
$page=1; 
}; 
$start_from = ($page-1) * $showitemsperlist; 

// THIS SECTION IS THE 'search' section. Items are shown according to user input. 
if(isset($_POST['search'])) 
{ 
    $search = $_POST['search']; 
    $terms = explode(" ", $search); 
    $customerlistquery = " 
    SELECT * 
    FROM customer 
    LEFT JOIN company 
    ON customer.compid=company.compid 
    WHERE 
    "; 
    $i = 0; 
    foreach ($terms as $each) 
    { 
     if ($i++ > 0) 
     $customerlistquery .= ' OR '; 

     $customerlistquery .= "concat(custsurname, custforename, custmidname, custpostal, custphone1, custphone2, custfax, custnamecode) LIKE '%$each%' "; 
    } 
    $customerlistquery .= " ORDER BY $orderby ASC LIMIT $start_from, $showitemsperlist" ; 

} 
else 
// IF NOT SEARCHING, JUST SHOW EVERYTHING. 
{ 
    $customerlistquery = " 
      SELECT * 
      FROM customer 
      LEFT JOIN company 
      ON customer.compid=company.compid 
      ORDER BY $orderby 
      ASC LIMIT $start_from, $showitemsperlist 
      "; 
} 

// EXECUTE QUERY: 
$result=mysql_query($customerlistquery) or die("query fout " . mysql_error()); 

쿼리

가 작동되고 모든 설정 될 수 있지만,이 아래에 나는 페이지를 계산하는 코드의 라인을 사용 :

$sql = "SELECT COUNT(custid) FROM customer"; 
$rs_result = mysql_query($sql); 
$row = mysql_fetch_row($rs_result); 
$total_records = $row[0]; 
$total_pages = ceil($total_records/$showitemsperlist); 
echo "<p id='pagination'>"; 
if ($total_pages < 2) 
{ 
    echo "<br/>"; 
} 
else 
{ 
    echo "Page: "; 
    for ($i=1; $i<=$total_pages; $i++) 
    { 
     echo "<a href='crm_custlist.php?page=".$i."' id='pagination'>".$i."</a>"; 
    } 
} 
echo "</p>"; 

여기서 '문제'라는 것이 하나 있는데, '검색'기능을 실행할 때 $ sql입니다. '검색'을 실행하지 않으면 페이지 링크를 얻습니다. 정적이 아니기 때문에 '검색'하지 않을 때도 얻을 수 있습니다. '검색'쿼리에 맞지 않습니다.

그래서 $ rs_result = mysql_query ($ sql)을 변경하려고했습니다. to ... ($ customerlistquery), 거기에있는 결과를 계산해야하기 때문에, 그러나 이것은 내가해야하는 것보다 많은 페이지를 많이 준다!

다음으로 fetch_row를 num_rows로 변경하려고했는데, ASC 제한 사이의 차이가 반환되므로 도움이되지 않습니다.

그래서 전체 결과를 계산해야합니다. 다른 결과가 될 수 없습니다. 난 정말 이해가 안 무엇

는 :

$sql = "SELECT COUNT(custid) FROM customer"; 
$rs_result = mysql_query($sql); 
$row = mysql_fetch_row($rs_result); 
$total_records = $row[0]; 

(27 개) 값을 반환합니다. SELECT (custid) FROM 고객도 27 개의 값을 반환합니다 ... 그래서 알아 냈습니다. 어떻게 든 $ customerlistquery에 총 금액을 반환하고 $ total_records로 사용할 수있는 추가 COUNT (custid) 필드가 필요합니다.

최선의 선택이있는 총 레코드를 반환하는 mysql_num_rows도하는 것입니다 (적어도 나는. 나는 그것을 알아 냈다고 생각), 그러나 이것은

나는 완전히 난 ... 때문에 ASC 제한 이제 불가능하다 여기에 붙어있어. 어떤 도움을 환영합니다 !!!

고맙습니다.

편집 : 31-10-2012 - 나는 그것을 발견 11시 50분

좋아. $ customerlistquery에 SELECT COUNT (*)를 사용하고 ... ($ sql)을 $ rs_result = mysql_query ($ customerlistquery);로 바꿔야합니다.

이렇게하면 필요한 값을 반환합니다. 하지만 이제는 내가 정의한 모든 필드가 정의되지 않은 인덱스입니다. 12시 6분

- 31-10-2012 :

while($record=mysql_fetch_array($result)) 
{ 
$custid=$record['custid']; 
$compid=$record['compid']; 
$compname=$record['compname']; 
$custsurname=$record['custsurname']; 

편집 : 인덱스를 정의하기 위해 아래의이 라인을 사용하여

은 없습니다 ... SELECT COUNT ()와, SELECT 작업 아주 가깝다! 내 $ customerlistquery에 COUNT (*) 인 새 테이블 행을 추가하려고 시도했습니다. 곧 모든 것을 시도해보십시오 ^^ 곧 작동 할 것입니다.내가 뭘하는지

SELECT * 
FROM customer 
LEFT JOIN company 
ON customer.compid=company.compid 
WHERE 
(SELECT COUNT(*) 
    FROM customer) 

확실하지, 의견이 될 무관 전에 내 진행 상황을 알려주는 약간의 시간이 필요합니다 ..

답변

1

왜 그

while($record=mysql_fetch_array($result)) { 
echo '<pre>"; 
print_r($record); 
echo "</pre>"; 
} 

같은 디버깅하지 않았고 $ record

+0

를 참조하십시오. 나는 아주 어리 석다. 그러나 phpmyadmin에서 쿼리를 실행하여 문제를 발견했습니다. 이제 모든 레코드에 대해 내 레코드 필드에 COUNT (*)를 (table1)로 배치해야합니다. 그걸 알아 내면 아마도 효과가있을 것입니다. –

관련 문제