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 :

Divisé une requête sql en plusieurs


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Divisé une requête sql en plusieurs
    Bonjour à tous,

    J'ai une requête mais qui va rechercher un trop gros nombre de rows, du coup une fatal erreur "out of memory" est généré.
    Alors j'ai pu longtemps effectuer des recherches sur la toile et la plupart des conseils sont de modifier le php.ini ou autre modifications de limit mémoire mais ce n'est pas la méthode que je voudrai.
    Pour ma part j'aurai plus pensez de deviser la requête, c'est à dire une requête dans une boucle while avec un offset départ 0 et limite 1000 qui s'auto-incrémenterai (offset = limit && limit = limit + 1000), mais quel serait la condition de sortie??? peut être en ajax.

    Merci pour ceux qui veulent participer à ce brainstorming avec moi !!!!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    On peut peut-être déjà reflechir à la raison qui fait que cette requête est si longue a executer.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    C'est une requête SELECT pour extraire des users d'une table selon des critères de recherche donc si je souhaite tout les users homme il doit y avoir des milliers de lignes du coup fatal error !!!

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Qu'est ce que tu fais de ces données ensuite ?
    Tu les mets dans un tableau PHP ?

    Parce que de toute façon ce n'est pas la requête qui utilise de la mémoire mais bien la quantité totale de données arrivant dans PHP ; donc tu auras pu segmenter la requête, quand tu rassembleras le resultat, ça sera toujours trop gros.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT * FROM users WHERE user.user_civilite IN ('Monsieur');

    Ma requête passe quand ma clause WHERE a plus de conditions ou quand ma requête a une LIMIT.

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Pourquoi mettre un IN quand tu n'as qu'une valeur à tester ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    oui désolé mais je met le IN quand y a plusieurs valeur (homme, femme, les deux à la fois), donc après j'affiche le résultat dans une table HTML ou un export excel via PHPExcel, donc si je comprend bien, c'est pas la requête qui génère l'erreur mais le remplissage dans la table ???

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Heu... j'ai rien contre les transgenre (du moins, j'aurais surtout pas le droit de le dire si c'était le cas ) mais si tu veux tester les deux, à priori c'est que tu n'as pas réellement besoin du WHERE...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    non dans la table users au champs SEXE il y a NON RENSEIGNE, HOMME, FEMME, HOMME OU FEMME (pourquoi homme ou femme euhhh )

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Oui enfin même si ta requête retourne 50000 lignes cela n'explique pas que tu dépasses la mémoire.
    A moins que
    - ton serveur ait une limite mémoire très basse
    - tu fasses des traitement fous sur les données après la requête
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Ba non je fait rien de grandiose !!! j'ai vu qu'on pouvais faire des tables indexé, 100 rows dans la table avec des boutons pour afficher une autre page avec les 100 suivant ect ... peut être la solution non ???

  12. #12
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Dans le cas d'un affichage HTML, oui, un affichage paginé serait sans doute une bonne idée (tu imagines ton utilisateur qui se retrouve face à un tableau de 15000 lignes dans une seule page )
    A lire sur le sujet : Créer un système de pagination automatique en PHP (exemple sur un livre d'or !)

    Dans le cas d'un export via PHPExcel, c'est un autre problème : il te faudra toutes les lignes. Toutefois, il doit être possible de générer le fichier par paquets ou quelque chose du genre. En tout cas, ce qui est sûr c'est qu'il ne faut pas récupérer toutes les données dans un tableau PHP et ensuite parcourir le tableau pour créer l'Excel
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  13. #13
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par darKnight94 Voir le message
    Ba non je fait rien de grandiose !!! j'ai vu qu'on pouvais faire des tables indexé, 100 rows dans la table avec des boutons pour afficher une autre page avec les 100 suivant ect ... peut être la solution non ???
    En parlant d'index, tu en as posé sur ta table users dans ta base de données ? et lesquels ? une clé primaire, une clé d'unicité, un simple index sur le sexe ? (hihi ça me fait penser à la blague "Le pape a mis la capote à l'index, quelle drôle de façon de mettre une capote").

    http://dev.mysql.com/doc/refman/5.7/...l-indexes.html
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

Discussions similaires

  1. Exécuter une requête SQL lourde en plusieurs fois
    Par diabli73 dans le forum Général Java
    Réponses: 5
    Dernier message: 10/06/2010, 18h13
  2. Réponses: 4
    Dernier message: 02/04/2010, 14h39
  3. [MySQL] Afficher plusieurs informations d'après une requête SQL
    Par Remus91 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/06/2009, 14h59
  4. Plusieurs jointures dans une requête sql
    Par Pero dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2005, 20h59
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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