2012-07-21 3 views
0

Je crée un site web personnel. Je suis coincé sur le blog. Je l'ai donc il montre 5 par page, et c'est bien quand il n'y a pas de pauses dans les ID dans ma table MySQL.
Mais, j'ai la possibilité de supprimer des blogs, et cela gâche tout, parce que ma boucle contient l'identifiant manquant, et ne montre rien, donc il n'y en a que 3 ou 4 par page. enter image description hereSaut sur une ligne si elle n'existe pas. MySQL/PHP

(le blog avec id = 10 a été supprimé)

Je ne vais pas montrer tout le code, mais voici quelques-uns.

$i = $blog_count-(($currentpage*$maxperpage)-$maxperpage); 
while ($i >$blog_count-(($currentpage*$maxperpage)-$maxperpage)-$maxperpage){ 
//render the blogs 
$i--; 
} 

$ blog_count est égal au nombre de lignes présentes dans la table. J'ai une autre variable avec laquelle je discutais, qui est $ maxid. C'est simplement le plus grand numéro d'identification.

Toute aide serait appréciée. J'ai le sentiment que je devrais savoir comment faire, mais je suis perplexe.

EDIT: J'ai changé mon code pour

$start = $currentpage*$maxperpage-$maxperpage; 
$query = "SELECT * FROM blogs ORDER BY id DESC LIMIT $start,$maxperpage"; 
$result=mysql_query($query) or die(mysql_error()); 
while ($blog = mysql_fetch_array($result)) 

Et cela fonctionne. Merci les gars.

+0

Quelle est votre requête SQL pour récupérer les articles de blog actuellement? Le travail que vous faites en PHP (aussi le travail pour ignorer les lignes inexistantes) peut certainement être fait dans votre requête SQL – jolivier

+0

connaissez-vous la clause 'limit' dans MySQL? – codingbiz

+0

Le code que vous avez posté semble juste exagéré! : s – craig1231

Répondre

0

Ok 2 choses que je suggérerais ...

En utilisant la clause limite MySQL, ce qui limitera le nombre de résultats renvoyés.

i.e.

SELECT * FROM `table1` LIMIT 10; 

Ou utiliser un autre domaine comme deleted pour déterminer si la ligne est « supprimé », donc ça va être encore dans la base de données, mais pas active.

1

Votre problème semble être que vous n'utilisez pas correctement votre base de données.

Vous devez laisser la base de données retourner une collection de lignes filtrées et triées en fonction de vos besoins. Dans un scénario de blog classique (où les articles peuvent être inactifs/pas encore rendus publics), vous demandez à la base de données de renvoyer une collection d'articles actifs triés par date. Lisez le SQL de base et faites-vous une faveur et utilisez un ORM décent (une couche d'abstraction de base de données facilitant l'exécution de requêtes, vous isolant du SQL brut).

Comme cela a déjà été mentionné, vous pouvez utiliser LIMIT pour obtenir un sous-ensemble de lignes au cas où vous souhaiteriez effectuer une pagination.

+0

Je pensais à trier par date, mais je pensais juste que trier par identifiant serait plus facile, ou la même chose. Merci pour l'info –

0

Comme mentionné par d'autres, vous ne devriez pas compter sur le champ d'identification arbitraire du billet de blog. Tirez vos messages dans l'ordre trié de la base de données et ensuite les sortir dans une boucle. Voici quelques exemples de code pour vous aider à démarrer:

$results = $connection->query("SELECT * FROM Posts LIMIT 5, 5 ORDER BY id DESC"); 
while ($row = $result->fetch_assoc()) 
{ 
//Pull data from the row and display it 
} 

Ainsi, ce code va tirer le 6 au 10 messages de la base de données, indépendamment de ce que les messages ont été supprimés. Le premier paramètre pour LIMIT est le nombre de lignes à sauter (donc, 0 pour la première page, 5 pour la seconde, etc.) et le deuxième paramètre est le nombre maximum de résultats (vous voulez que cela soit toujours 5).

Questions connexes