Je suis désolé, je suis faible pour l'anglais. je fais écho à 2 lignes dans chaque page. comment faire écho à la deuxième rangée

SELECT *
FROM `mzmx_post`
JOIN mzmx_post_category 
WHERE mzmx_post.id = mzmx_post_category.post_id AND zmx_post_category.category_id = 5
ORDER BY id DESC 
LIMIT 2
2
jalal mobini 7 avril 2020 à 21:01

3 réponses

Meilleure réponse

Vous pouvez utiliser la forme à deux arguments de LIMIT pour compenser le résultat par un nombre donné de lignes, comme:

SELECT *
FROM `mzmx_post`
JOIN mzmx_post_category ON mzmx_post.id = mzmx_post_category.post_id 
WHERE mzmx_post_category.category_id = 5
ORDER BY id DESC
LIMIT 2, 2      -- fetch records 3 and 4

Cela vous donne la deuxième page. Si vous voulez la troisième page, alors:

LIMIT 4, 2

Etc.

Notez que j'ai modifié votre requête afin que la condition de jointure entre les tables soit placée dans la clause ON de la jointure plutôt que dans la clause WHERE.

3
GMB 7 avril 2020 à 18:02

Mieux vaut ajouter une colonne supplémentaire (par exemple mzmx_post_key bigint) de type Long dans chaque table et avoir une valeur séquentielle sur cette colonne. Utilisez cette colonne pour extraire les données de la base de données de la page. sqL suery devrait ressembler à:

SELECT *
FROM `mzmx_post`
JOIN mzmx_post_category ON mzmx_post.id = mzmx_post_category.post_id 
WHERE mzmx_post_category.category_id = 5 and mzmx_post_key> ##last record key##
ORDER BY mzmx_post_key ASC
LIMIT 2
0
alfadog67 7 avril 2020 à 21:00

L'idée de base est l'utilisation

LIMIT n,o


n est le résultat par page
o est le décalage par rapport au premier résultat

Pour la p-ème page, le décalage serait

o = p * n
où p = 0,1,2, ....

0
ThatGuy 7 avril 2020 à 18:18