загрузить больше записей скрипт, показывающий ту же самую последнюю запись из предыдущего набора записей, если добавлена ​​новая запись - PullRequest
0 голосов
/ 09 ноября 2018

Я очень запутался, и я не знаю, как решить эту проблему, я не уверен, нужно ли мне корректировать jQuery или SQL, чтобы правильно показать это без дубликатов. Я просто не знаю, поэтому у меня есть этот скрипт, который загружает набор записей каждый раз, когда вы нажимаете кнопку «Загрузить больше».

Это прекрасно работает, но если я добавлю новую запись перед загрузкой следующего набора записей, он покажет дубликат последней записи из предыдущего набора записей в следующий набор записей. Два приведенных ниже примера представляют числа в виде записей

Example 1

Нормальная ситуация: записи из любого источника не добавлены

Всего записей 6

6,5,4 ( Загрузить еще ) 3,2,1

Example 2

Новая запись добавляется из любого источника перед загрузкой следующего набора записей с помощью кнопки «Загрузить еще»

Всего записей 6

6,5,4 ( Новая запись добавлена, например, в php my admin без использования этого скрипта ) 4,3,2

Как вы можете видеть в примере 2, я добавил новую запись в php my admin перед тем, как загрузить следующий набор записей, и вы можете видеть, что первая загрузка содержит записи 6,5,4, а следующая загрузка записей содержит 4, 3,2 уведомления, он показывает 4 снова, он должен показать 3,2,1

Это самый простой способ описать мою проблему. Я добавил gif скриншоты своей проблемы, чтобы лучше понять, с чем я столкнулся. Обратите внимание на номера 228 и 227, которые находятся внутри желтого шара. Это нормальная рабочая ситуация, которая проиллюстрирована в первом примечании к скриншоту gif. Никакая новая запись не добавлена ​​ни из одного источника.

Normal example

На этом скриншоте gif я добавил новую запись из другого источника, например, в php my admin, прежде чем загружать следующий набор записей кнопкой load more. Это моя проблемная ситуация, которую я пытаюсь исправить, обратите внимание на 228 в желтом шаре, вы можете видеть, что он показывает 228 два раза, потому что я добавил новый рекорд за кулисами. Он должен показывать 228 раз независимо от того, добавил я новую запись за кулисами или нет.

Unexpected example

Так как я могу исправить эту проблему? Я не хочу, чтобы повторяющаяся запись отображалась при следующей загрузке, потому что я добавил новую запись перед загрузкой следующего набора записей.

Дайте мне знать, вызывает ли это jQuery или SQL.

Мой код

index.html

<!DOCTYPE html>
<html>
<head>
<style>

#load-more-button {
width: 100px;
margin: auto;
display: block;
}

.results-container {
width: 350px;
margin: auto;
}

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>        
<script type="text/javascript">
$(document).ready(function (){

/*<load more by pressing a button script>*/

//<settings define
var start = 0;
var limit = 10;
//

//Call the ajax request on page load
getData();
//

//load more records by pressing a button
$('#load-more-button').click(function(){
getData();
});
//

/*<function>*/
function getData() {

//settings variable
var settings = {
getData: 1,
start: start,
limit: limit
};
//

//result variable
var result= function(response) {
start += limit;
$(".results-container").append(response);
}
//

//request
$.ajax({
url: 'data.php',
type: 'POST',
dataType: 'text',
data: settings,
success: result 
});
}
/*</function>*/
/*</load more by pressing a button script>*/

});
</script>
</head>
<body>

<div class="results-container"></div>
<button id='load-more-button'>Load more</button>
</body>
</html>

data.php

<?php
$servername='localhost';
$username='jd';
$password='1234';
$db_name= 'test';

$connect = new mysqli($servername,$username,$password,$db_name);

$start = $connect->real_escape_string($_POST['start']);
$limit = $connect->real_escape_string($_POST['limit']);

$query = "SELECT*FROM records WHERE NOT status='remove' ORDER BY ID DESC LIMIT $start, $limit";

$result= $connect->query($query);

?>
<style>
#number{
background-color: gold;
color: black;
border-radius: 100%;
padding: 5px;
}

h2{
display: inline-block;
}

</style>

<?php while($row = $result->fetch_assoc()) { ?>

<h2 id='number' ><?php echo $row['id']; ?></h2>
<h2><?php echo $row['html_id']; ?></h2>
<p><?php echo $row['source']; ?></p>

<?php } ?>

<h1>
<?php 
//Conditional statement if there is no more records to load
if($result->num_rows == 0){
    echo 'End';
    echo'
    <script>
    $("#load-more-button").css({"display": "none"});
    </script>
    ';
}
//
?>
</h1>

1 Ответ

0 голосов
/ 09 ноября 2018

Ваш SQL-запрос правильный, но неправильный для этой ситуации.

SELECT*FROM records WHERE NOT status='remove' ORDER BY ID DESC LIMIT $start, $limit";

например

В вашей базе данных 1,2,3,4,5,6 записи.Ваш запрос извлекает записи в порядке убывания.Таким образом, будут получены первые 3 записи, такие как 6, 5, 4, затем в следующем запросе 3,2,1.

Но когда ваши первые 3 записи будут получены из базы данных (6,5,4), то вы добавляетееще одна запись с id = 7. Теперь в вашей таблице всего 7 записей.Когда вы нажимаете «загрузить еще раз», он пропускает первые 3 записи.Означает, что пропускает 7, 6, 5. Таким образом, 4, 3, 2 будут возвращены в следующем запросе.вот почему 4 повторяется.

Имеет смысл ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...