IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

selectionner toutes les n lignes


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 115
    Par défaut selectionner toutes les n lignes
    bonjour,
    je chercher à selectionner toutes les 25 lignes de ma table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SET @rownum:=0;
    SELECT `id` FROM Adherent WHERE (@rownum:=@rownum+1) % 25=1
    Ce code fonctionne bien sur phpmyadmin, mais pas sur php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $code = 'SET @rownum:=0;
            SELECT `id` FROM Adherent WHERE (@rownum:=@rownum+1) % 25=1';
            $statement = $connection->getConnection()->query($code);
            print_r($statement->fetchAll(PDO::FETCH_COLUMN));
    a vrais dire je suis dans le flou, je n'arrive pas a trouver la doc sur cet instruction que j'ai trouvé par hasard sur internet.
    Auriez vous des pistes?
    merci

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Tu ne précises pas ton SGBD. Je pars du principe que tu utilises un MySQL à jour, c'est à dire MySQL 8.

    Tu peux utiliser la fonction d'analyse fenêtrée ROW_NUMBER() => https://dev.mysql.com/doc/refman/8.0...ion_row-number.
    Pour garder une cohérence et une stabilité minimum dans le résultat il faut faire un tri, mettons sur un horodatage d'adhésion, ici members.joining_at.

    Requête de base à exécuter sur MySQL Workbench pour comprendre la suite :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ALL
        id, full_name,
        ROW_NUMBER() OVER (ORDER BY joining_at ASC) AS i, -- Compteur, pour comprendre le résultat
        ROW_NUMBER() OVER (ORDER BY joining_at ASC) MOD 25 = 0 AS flag -- Marque à TRUE toutes les 25es lignes
    FROM members

    Voilà pour le résultat brut.

    Ensuite, puisque tu ne veux conserver que les 25es lignes, il suffit d'embarquer cette requête dans une CTE et filtrer selon la colonne flag :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WITH members_preselection (id, full_name, i, flag) AS (
        SELECT ALL
            id, full_name,
            ROW_NUMBER() OVER (ORDER BY joining_at ASC), -- Compteur, pour comprendre le résultat
            ROW_NUMBER() OVER (ORDER BY joining_at ASC) MOD 25 = 0 -- Marque à TRUE toutes les 25es lignes
        FROM members
    )
    SELECT ALL id, full_name, i
    FROM members_preselection
    WHERE flag = TRUE

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 115
    Par défaut
    merci pour ta suggestion,
    en effet j'ai oublié de précisé que je tournais sur MariaDB 10.3.32. j'ai testé vite fait le code que tu m'as donné sans succé, mais peut etre l'ai je mal ecrit. Cet syntaxe fonctionne sur mariadb?

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Selon la doc
    CTE à partir de 10.2.1 https://mariadb.com/kb/en/with/
    Fonctions fenêtrées à partir de 10.2.0 https://mariadb.com/kb/en/window-functions/

    Donne la structure de ta table, ton script et l'erreur produite.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 115
    Par défaut
    merci, j'ai tapé quelque chose de ce gout la pour l'instant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT `2`,
     ROW_NUMBER() OVER ( ORDER BY `id`) AS i,
     ROW_NUMBER() OVER ( ORDER BY `id`) MOD 25 = 0 AS flag 
    FROM Adherent
    2 etant le nom.
    Cela fonctionne, mais j'ignore ce que veut dire MOD 25 = 0 ?

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 671
    Par défaut
    il s'agit de l'opération modulo :
    https://fr.wikipedia.org/wiki/Modulo_(op%C3%A9ration)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] selectionner tout les lignes dans GridView
    Par ramroum1986 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 12/08/2011, 11h58
  2. selectionner toutes les lignes d'un datagrid
    Par raoufinf dans le forum Silverlight
    Réponses: 2
    Dernier message: 24/06/2011, 11h09
  3. [XL-2003] Selectionner toutes les lignes ayant meme argument
    Par apnw7931 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/02/2011, 16h06
  4. Selectionner toutes les n lignes d'un tableau
    Par vinch9 dans le forum Conception
    Réponses: 2
    Dernier message: 30/08/2010, 15h21
  5. [A-07] Selectionner toutes les lignes d'une liste
    Par stagolee dans le forum VBA Access
    Réponses: 6
    Dernier message: 07/11/2008, 21h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo