2015-11-20 2 views
4

Je dois actualiser automatiquement le contenu d'une table de données mysql toutes les 5 secondes, mais ne montrer qu'un seul enregistrement distinct à la fois, en passant par chaque enregistrement dans une boucle sans fin.Contenu de la mise à jour automatique de la table Mysql - un à la fois

que je charge news.php, qui a cette js:

<script type="text/javascript"> 
var auto_refresh = setInterval(function() { 
    $('#canvas').load('content.php').fadein("medium");}, 5000); 
    // refresh every 5 seconds 
</script> 

content.php a la connexion db

$query_Recordset5 = "SELECT * FROM news"; 
$Recordset5 = mysql_query($query_Recordset5, $connection) or die(mysql_error()); 
$row_Recordset5 = mysql_fetch_assoc($Recordset5); 
$totalRows_Recordset5 = mysql_num_rows($Recordset5); 

Outre les champs retentissait la page. Je comprends que vous deviez créer un compteur et ramener un disque différent à chaque fois, mais j'ai du mal à le faire.

Merci

+0

«mais ne montrant qu'un seul enregistrement distinct à la fois» Qu'est-ce que cela suppose? Voulez-vous dire que vous voulez faire 'SELECT DISTINCT' pour que les lignes que vous retournez ne soient jamais' duplicates'? Ou voulez-vous seulement 1 rang de votre requête? ou avez-vous besoin de quelque chose pour gérer la valeur de décalage existante afin de ne pas toujours récupérer tous les enregistrements? Une clarification est nécessaire. – Ohgodwhy

+1

Si vous le pouvez, vous devriez [arrêter d'utiliser les fonctions 'mysql_ *'] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). [Ces extensions] (http://php.net/manual/fr/migration70.removed-exts-sapis.php) ont été supprimées en PHP 7. En savoir plus sur [préparé] (http://en.wikipedia.org/ instructions wiki/Prepared_statement) pour [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) et [MySQLi] (http://php.net/manual/fr/mysqli.quickstart .prepared-statements.php) et envisagez d'utiliser PDO, [c'est vraiment très simple] (http://jayblanchard.net/demystifying_php_pdo.html). –

+0

Tout le monde voit-il le même enregistrement s'afficher en même temps? – RamRaider

Répondre

1

Si votre table a un champ d'incrémentation automatique (dire "id"). Vous commencez en passant page.php et id de 0, de sorte qu'il va saisir le champ d'incrémentation automatique supérieur à 0, puis vous passez l'ID de ces champs par le biais de jquery. Lorsque vous l'envoyez une seconde fois, il ne sera pas inclus, car vous utiliserez le signe supérieur à. Le if num_rows == 0 vérifie s'il y a des champs, sinon aucun, alors il supposera que le champ d'incrémentation automatique que vous lui avez envoyé est le dernier, et alors il lancera l'instruction sql avec le très première valeur d'incrément automatique.

<?php 
// page.php 
$id = (int) $_REQUEST['id']; 
$sq = "select * from news where id > ".$id." order by id asc limit 0,1"; 
$qu = $con->query($sq); 

if ($qu->num_rows == 0) { 
    $sq2 = "select * from news order by id asc limit 0,1"; 
    $qu2 = $con->query($s2); 
    while ($fe = $qu->fetch_assoc()) { 
     echo $fe['id']."|".$fe['content']; 
    } 
} else { 
    while ($fe = $qu->fetch_assoc()) { 
     echo $fe['id']."|".$fe['content']; 
    } 
} 
?> 

<script> 
$(document).ready(function() { 
    setInterval(function(){ updateNews(); }, 5000); 
}); 
function updateNews() { 
    var id = 0; 
    id = $("#hidden-id").val();   

    $.get("page.php?id=" + id, function(data) { 
     // I use $.get so that I can split the data that it returns before populating 
     // the #canvas. This way we can strip off the first part which is the auto 
     // increment 
     var ref = data.split('|'); 
     $("#hidden-id").val(ref[0]); 
     $("#canvas").html(ref[1]); 
    }); 
} 
</script>