2010-03-23 4 views
0

Je crée des panneaux de recherche de style eBay qui permettent aux utilisateurs de restreindre leurs résultats en fonction de certains critères. Par exemple:Création de compteurs à partir de résultats de recherche paginés ...?

Mots

Littérature (8) Fiction (4) Anglais (4) américain (3) non-fiction (2)

Le nombre des résultats qui ont cette propriété est entre parenthèses. Dans un premier temps, je construit les compteurs en plaçant ce code dans mon affichage boucle résultats:

if(isset($tags[$row['tags']])) { 
    $tags[$row['tags']]++; 
} else { 
$tags[$row['tags']] = 1; 
} 

Je paginé mes résultats et qui ont cessé de travailler - les données requête suffisamment retourne uniquement pour la page que vous êtes, donc les compteurs uniquement représenter les résultats sur cette page.

Quelqu'un peut-il suggérer une autre approche?

Répondre

0

Vous devrez exécuter une deuxième requête pour tag, COUNT(*) in <table> GROUP BY tag pour obtenir le nombre total de chaque étiquette.

modifier:

Check this out. C'est un nouveau par moi, mais il ressemble à ce que vous voulez.

Démarrez votre requête avec SELECT SQL_CALC_FOUND_ROWS, puis suivez votre requête avec SELECT FOUND_ROWS();

+0

Les étiquettes ne sont qu'un critère parmi d'autres. Si possible, je préférerais éviter les requêtes supplémentaires. – cantlin

+0

Votre autre option consiste à faire une requête complète, sans limite. Ensuite, vous pouvez compter vos tags et faire la logique de pagination en PHP. Ce sera une approche plus lourde, du moins en PHP sinon sur la base de données, mais elle devrait être plus flexible. – keithjgrant

+0

Vous avez raison, mais c'est un appel difficile - des requêtes supplémentaires par rapport à saisir l'ensemble des données sur chaque page. Je me demande comment les autres sites qui affichent ce type d'information structurent leur code. – cantlin

0
SELECT COUNT(*) FROM books WHERE tagid=$tagid 

Cela nécessiterait une autre requête cependant. S'il vous plaît fournir plus d'informations sur vos méthodes de pagination.

+0

Je pagine avec LIMIT: $ from = (($ page * $ results_per_page) - $ results_per_page); $ sql. = "LIMIT". $ À partir de. ",". $ Results_per_page; – cantlin

Questions connexes