1

私はこのコードについてしばらくの間自分自身を食べています。続行する前に、コードが書き直されることは本当に期待していません。道に迷ったので、正しい方向に進むのを手伝ってください^^

これが、リストのクエリに使用するコードです。$ 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>";

ここに1つの問題があります。それは、「検索」関数を実行するときの$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に追加のCOUNT(custid)フィールドを追加する必要があります。これは、合計金額を返し、$total_recordsとして使用できます。(少なくとも私はそれを理解したと思います。)

最良のオプションは、mysql_num_rowsを使用して、見つかったレコードの合計を返すことですが、ASC LIMITのため、これは現在不可能です...

私は完全にここで立ち往生しています。どんな助けでも大歓迎です!!!

ありがとう。

編集:31-10-2012-11:50

わかりました。見つけました。$customerlistqueryにSELECTCOUNT(*)を使用し、...($ sql)を次のように置き換える必要があります:$ rs_result = mysql_query($ customerlistquery);。

これにより、必要な値が返されます。しかし、エコーアウトしたいすべてのフィールドは未定義のインデックスです。

以下の行を使用してインデックスを定義します... SELECTCOUNT( )ではなくSELECTを使用します。

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

編集:2012年10月31日-12:06

非常に近いです!$ customerlistqueryにCOUNT(*)である新しいテーブル行を追加しようとしています...すべてを試してみてください^^すぐに機能します...私は願っています。

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

私が何をしているのかわからないので、コメントが無関係になる前に、進捗状況を通知するだけで少し時間が必要です。

4

1 に答える 1

1

なぜあなたはそのようにデバッグしなかったのですか

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

$recordを見る

于 2012-10-31T11:18:56.807 に答える