0

誰かが返されたレコードをナビゲートする問題について私を助けてくれますか?私はmysqlクエリを持っています:

if(isset($_GET['record'])) {
$record_current = $_GET['record'];
}else{
$record_current = 1;
}

$useremail = $_SESSION['useremail'];

$view_sql = "SELECT * FROM missions, calendar, bookings 
WHERE missions.missions_id =  calendar.missions_id 
AND calendar.calendar_id = bookings.calendar_id 
AND bookings.booking_email ='$useremail' LIMIT $record_current,1";

$view_result = mysql_query($view_sql) or die(mysql_error());
$view_count = mysql_num_rows($view_result);
$rsView = mysql_fetch_assoc($view_result);

クエリは、必要な結果を生成します。値は、動的フォームに入力するために使用されます。私が抱えている問題は、レコードを適切にナビゲートすることです。私はこのコードをナビゲーションに使用しています(ユーザーが行ったすべての予約を表示できるようにするため)。コード:

<span class="label"><?php if($record_current > 1) { ?><a href="view.php?record=<?php echo $record_current - 1; ?>" >Previous</a><?php } ?></span>
<span class="element"><?php if($record_current < $view_result) { ?><a href="view.php?record=<?php echo $record_current + 1; ?>" >Next</a><?php } ?></span>

問題は、表示される最初のレコードが実際にはクエリの2番目のレコードであり、最後のレコードが表示されている場合でも[次へ]リンクが表示されることです。リンクをクリックすると、空白のフォームが表示されます。私は自分が何を間違っているのかわかりません、そして私はこれで何時間も遊んできました、どんな助けでも大いに感謝されます。乾杯

編集

私はこれにコードを修正しました(Seanに感謝します):

$view_sql = "SELECT SQL_CALC_FOUND_ROWS * FROM missions, calendar, bookings 
WHERE missions.missions_id =  calendar.missions_id 
AND calendar.calendar_id = bookings.calendar_id 
AND bookings.booking_email ='$useremail' LIMIT $record_current,1";

$view_result = mysql_query($view_sql) or die(mysql_error());
$view_count = mysql_query("SELECT FOUND_ROWS() AS cnt");
$rsView = mysql_fetch_assoc($view_result);
$adj_count = (mysql_result($view_count, 0, "cnt") - 1);

どうやら、「SELECTFOUND_ROWS」はゼロから始まるセットを返します。これは現在機能しています。貢献してくれたすべての人に感謝します。乾杯、スパッド

4

3 に答える 3

2

注:LIMIT $record_current,1すべてのカウントがゼロから始まるというコンピューターロジックを思い出させるために、最初のデータを取得しようとする場合は、初期値を$record_current0に設定する必要があります。

于 2013-03-26T04:01:50.473 に答える
1

行数ではなくクエリに対してチェックしているためif()、行のNEXT行が間違っています。-に変更してみてください$record_current$view_result$view_count

if($record_current < $view_count)

編集/http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rowsをご覧
ください。SQL_CALC_FOUND_ROWSFOUND_ROWS()

$view_sql = "SELECT SQL_CALC_FOUND_ROWS * FROM missions, calendar, bookings 
WHERE missions.missions_id =  calendar.missions_id 
AND calendar.calendar_id = bookings.calendar_id 
AND bookings.booking_email ='$useremail' LIMIT $record_current,1";

$view_result = mysql_query($view_sql) or die(mysql_error());
$view_count = mysql_query("SELECT FOUND_ROWS()");
$rsView = mysql_fetch_assoc($view_result);
于 2013-03-26T03:42:20.270 に答える
1
if(isset($_GET['record'])) {
$record_current = $_GET['record'];
}else{
$record_current = 1;
}

$view_sql = "SELECT * FROM missions, calendar, bookings 
WHERE missions.missions_id =  calendar.missions_id 
AND calendar.calendar_id = bookings.calendar_id 
AND bookings.booking_email ='$useremail' LIMIT $record_current,1";

問題は、表示される最初のレコードが実際にはクエリの2番目のレコードであるということです。

LIMITを使用している場合、最初の行のオフセットは常に1ではなく0になることに注意してください。

于 2013-03-26T04:22:34.807 に答える