2010-08-22 5 views
0

Je suis codant un blog type de chose, où l'auteur publiera l'article et il sera affiché dans la partie frontale, mon problème commence pour la sélection des messages que je dois remplir certaines conditions pour l'affichage des nouvelles à l'avant,mysql sélectionnez la déclaration et de limiter le nombre d'enregistrements

J'ai 4 champs dans la base de données à savoir

title 
pic_title 
pic_brief 
pic_detail 

vous l'aurez deviné juste en dehors de la table de titre le reste de trois tiendra le chemin du images dans le type de données varchar, qui sera utilisé pour afficher en tant que poste, le format de l'extrémité avant est tel que

a) il y aura au total huit après affichage à l'extrémité avant (huit entrées de la base de données)

b) il y aura trois poste au sommet qui comprendra la valeur de le titre du tableau , pic_title et pic_brief (total de 3 valeurs)

c) et le reste cinq ne contiendra que le titre et pic_title (à l'exception des trois entrées de haut) S'il vous plaît noter: je veux la deuxième requête d'exclure la partie supérieure 3 enregistrement qui existent déjà dans le top ie (première requête = 3 après dans l'ordre décroissant ordre, deuxième requête = 8 - 3 premiers = 5 post)

L'Ordre de la Poste que je veux est par id DESC

EDIT: Je pris la première requête comme

SELECT * FROM news ORDER BY id DESC LIMIT 3 

maintenant, si je prends la même seconde requête et essayer peuplant les valeurs par ordre desc à nouveau les mêmes enregistrements seront accessibles

En mots simples, je veux une requête qui sautera la dernière trois enregistrements classés par ID DESC

Comment réaliser cet exploit en PHP?

+0

Je pris la liberté de reformatage, ne hésitez pas à rouler en arrière si vous ne l'aimez pas –

+0

Quel est le « ordre "des messages? Triez-vous par titre ou autre chose? –

+0

l'ordre du post sera par ID DESC –

Répondre

2

C'est une situation où je choisirais probablement de sélectionner les huit enregistrements à la fois - moins il y a de déplacements dans la base de données, mieux c'est.

SELECT t.title, 
     t.pic_title, 
     t.pic_brief 
    FROM TABLE t 
ORDER BY t.id DESC 
    LIMIT 8 

... parce que le reste est juste présentation:

$query = sprintf("SELECT t.title, 
         t.pic_title, 
         t.pic_brief 
        FROM TABLE t 
       ORDER BY t.id DESC 
        LIMIT 8"); 

// Perform Query 
$result = mysql_query($query) or die(mysql_error()); 

$rowcount = 1; 

// Use result 
while ($row = mysql_fetch_assoc($result)) { 

    if(rowcount <= 3) { 
    echo $row['title'] 
    echo $row['pic_title'] 
    echo $row['pic_brief'] 
    } else { 
    echo $row['title'] 
    echo $row['pic_title'] 
    } 

    ++$rowcount; 
} 
+0

Et n'oubliez pas que le retour de quelques champs de chaînes supplémentaires à partir de la base de données est généralement beaucoup moins cher que de faire deux connexions à la base de données. – jcolebrand

+0

Wow, c'est l'une des meilleures solutions et je vais utiliser celui-ci, merci beaucoup je suis d'accord avec vous, même si j'étais ennuyé d'utiliser les deux requêtes db en un seul endroit et pensait à quelque chose comme ça, solution parfaite. –

5

Si vous voulez juste le SQL, la voici:

Première requête

SELECT * FROM `table` LIMIT 3 

Deuxième requête

SELECT * FROM `table` LIMIT 3,5 

(où table est le nom de votre table bien sûr de. Bien sûr, vous voudrez peut-être ajouter une clause ORDER BY. Pour exécuter ces requêtes en PHP, je suggère reading the manual.Si vous avez des problèmes spécifiques après avoir fait, t Si vous pouvez poster une nouvelle question.

+0

+1 Depuis la commande est par ID, limite devrait faire. – Ben

+0

Merci cela a fonctionné pour moi. –

1

première requête sera comme celui-ci

"select title, pic_title , pic_brief from table_name order by post_id desc limit 0 , 3" 

et reste cinq sera

"select title, pic_title from table_name order by post_id desc limit 3 , 5" 

deuxième requête exclut les trois résultats retournés par la première requête ...

Si vous voulez plus de perfection, vous pouvez collecter les trois ID retournés par la première requête et ajouter NOT IN dans la deuxième requête.

"select title, pic_title from table_name where post_id not in (1,2,3) order by post_id desc limit 0 , 5"; 
+0

merci j'ai la solution. –

Questions connexes