私はこのコードについてしばらくの間自分自身を食べています。続行する前に、コードが書き直されることは本当に期待していません。道に迷ったので、正しい方向に進むのを手伝ってください^^
これが、リストのクエリに使用するコードです。$ 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 )
私が何をしているのかわからないので、コメントが無関係になる前に、進捗状況を通知するだけで少し時間が必要です。