Récupérer l'enregistrement suivant/précédent d'une requête MySQL triée par plusieurs colonnes
P粉006977956
P粉006977956 2024-03-22 11:08:54
0
1
291

J'exécute la requête via ma base de données MySQL (MariaDB 10.3) comme ceci :

SELECT * FROM my_table ORDER BY priority DESC, expiration_date ASC, id ASC

Un exemple de ce tableau avec l'ordre donné ressemble à ceci :

id ... Priorité date_d'expiration
3 ... 2 2022-07-01 12:00:00
7 ... 2 2022-07-03 12:00:00
6 ... 2 2022-07-04 12:00:00
9 ... 1 2022-07-02 12:00:00
4 ... 1 2022-07-05 12:00:00
11 ... 1 2022-07-05 12:00:00

Maintenant, j'ai l'ID d'un enregistrement spécifique et j'essaie de récupérer les enregistrements qui sont avant/après ledit enregistrement dans les résultats de la requête dans l'ordre donné via SQL. Disons que j'ai un enregistrement avec un identifiant d'enregistrement 6,我想分别返回 ID 为 97.

Trier par une seule colonne unique, ce qui est facile à obtenir en une seule requête, mais je ne sais pas comment gérer plusieurs colonnes non uniques. Quelqu'un peut-il me dire comment y parvenir ?

P粉006977956
P粉006977956

répondre à tous(1)
P粉763748806

Suite au conseil de Paul Maxwell sur LEADLAG, j'ai pu rédiger une requête d'emploi comme celle-ci :

SELECT t.next_id 
FROM (
    SELECT id, 
        LEAD(id, 1) OVER (ORDER BY priority DESC, expiration_date ASC, id ASC) AS next_id 
    FROM my_table
) t 
WHERE t.id = ?

Récupérez les enregistrements précédents correspondant à LAG.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!