私は以下のクエリを持っています。ページングのカウントとして1番目、結果のテーブルにデータを書き込む2番目のクエリです。彼らはどちらも非常にうまく機能しましたが、Ordering機能をテーブルに追加したいと思っており、その方向でいくつかの努力を重ねてきました。PHP/MySQL - さまざまなORDER BY句のページ番号
本質的に、MySQLクエリを変数に格納された部分に分割しました。これは、フォームの提出とGETによって表現されるユーザーの希望に基づいて割り当てられる場合と割り当てられない場合があります。私は初心者レベルに過ぎず、これが私には論理的な意味を持っています。それはおそらく正しい方法ではありません!
データは、データベースに入力されると、デフォルトで順序付けられます。テーブルは一度に15行ずつ塗りつぶされます。理想的には、例えば、年齢や色など、別の方法で動物のデータを注文することを選択することができます。選択は、ページ自体にフォームを送信することによって行われ、照会は再提出され、結果は15行ページに再度出力されます。
はこれまでのところ、ここに私のコードです:
PAGINATION:
$genderid = $_GET['groupid'];
$sortby = $_GET['sortby'];
##################
if (isset($_GET['pageno'])) { $pageno = $_GET['pageno']; }
else { $pageno = 1; }
$initialcount = "SELECT count(*)
FROM profiles
WHERE ProfileName != 'Unknown'";
if ($genderid > 0) {
$genderquery = " AND ProfileGenderID = $genderid";
}
if ($sortby == 'age') {
$orderby = " ORDER BY ProfileYearOfBirth ASC";
}
elseif ($sortby == 'colour') {
$orderby = " ORDER BY ProfileAdultColourID ASC";
}
$finalcount = ($initialcount . ' ' . $genderquery . ' ' . $orderby);
$result = mysql_query($finalcount) or trigger_error();
$query_data = mysql_fetch_row($result);
$numrows = $query_data[0];
$rows_per_page = 15;
$lastpage = ceil($numrows/$rows_per_page);
$pageno = (int)$pageno;
if ($pageno > $lastpage) {
$pageno = $lastpage;
}
if ($pageno < 1) {
$pageno = 1;
}
$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;
if ($pageno == 1)
{
echo '<p class="pagination">';
echo '<span class="first"><< First</span><span class="previous">< Previous</span>';
}
else
{
echo '<p class="pagination">';
echo "<span class='first'><a href='{$_SERVER['PHP_SELF']}?pageno=1'><< First</a></span>";
$prevpage = $pageno-1;
echo "<span id='class'><a href='{$_SERVER['PHP_SELF']}?pageno=$prevpage'>< Previous</a></span>";
}
echo '<span class="pagination-nav">' . "Page $pageno of $lastpage" . '</span>';
if ($pageno == $lastpage)
{
echo '<span class="next">Next ></span><span class="last">Last >></span>';
echo '</p>';
}
else
{
$nextpage = $pageno+1;
echo "<span class='next'><a href='{$_SERVER['PHP_SELF']}?pageno=$nextpage'>Next ></a></span>";
echo "<span class='last'><a href='{$_SERVER['PHP_SELF']}?pageno=$lastpage'>Last >></a></span>";
echo '</p>';
}
OUTPUT:
<table class="admin-display">
<thead>
<tr>
<th>Name:</th>
<th>Age:
<form class="sorting-form" method="GET" action="">
<input type="hidden" name="sortby" value="age" />
<input type="hidden" name="groupid" value="<?php echo $genderid; ?>" />
<input type="submit" value="⇑" class="sort-submit" />
</form>
</th>
<th>Colour:
<form class="sorting-form" method="GET" action="">
<input type="hidden" name="sortby" value="colour" />
<input type="hidden" name="groupid" value="<?php echo $genderid; ?>" />
<input type="submit" value="⇑" class="sort-submit" />
</form>
</th>
<th>Gender:</th>
<th>Owner:</th>
<th>Breeder:</th>
</tr>
</thead>
<?php
$initialquery = "SELECT ProfileID, ProfileOwnerID, ProfileBreederID,
ProfileGenderID, ProfileAdultColourID, ProfileColourModifierID, ProfileYearOfBirth,
ProfileYearOfDeath, ProfileLocalRegNumber, ProfileName,
owner.ContactFirstName AS owner_fname, owner.ContactLastName AS owner_lname,
breeder.ContactFirstName AS breeder_fname, breeder.ContactLastName AS breeder_lname,
BreedGender, BreedColour, BreedColourModifier
FROM profiles
LEFT JOIN contacts AS owner
ON ProfileOwnerID = owner.ContactID
LEFT JOIN contacts AS breeder
ON ProfileBreederID = breeder.ContactID
LEFT JOIN prm_breedgender
ON ProfileGenderID = prm_breedgender.BreedGenderID
LEFT JOIN prm_breedcolour
ON ProfileAdultColourID = prm_breedcolour.BreedColourID
LEFT JOIN prm_breedcolourmodifier
ON ProfileColourModifierID = prm_breedcolourmodifier.BreedColourModifierID
WHERE ProfileName != 'Unknown'";
$finalquery = ($initialquery . ' ' . $genderquery . ' ' . $orderby . ' ' . $limit);
$result = mysql_query($finalquery) or trigger_error("SQL", E_USER_ERROR);
//process results
データが正常に(最初に)出力し、ユーザーが再提出することができますクエリも正常に終了しました。問題は、デフォルト以外のもので注文した後でクリックしてページを送るときに発生します。ページが変更されると、注文はデフォルトに戻ります。 ORDER BY句を最初の再提出を超えて維持する方法はわかりません。
これまでのところ、私がコードを壊すようになってから、物事が毛むくじゃらするようになりました。私は目障りなエラーを指摘する人が必要です!前もって感謝します:)
ちょうど注意:あなたのテーブルの前と後の両方にあなたのページネーションリンクを(私がしているように)したいのであれば、コードの始めに$ sortbyを定義しておかなければなりません。さもなければ、トップページリンクはソートをドロップし、下のものは(baseQeryの実行後に)それを保持します。明らかだが... – Eamonn