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 :

réutilisation résultat requête N dans requête N+1 Mysql


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut réutilisation résultat requête N dans requête N+1 Mysql
    Bonjour,

    Ma question fait suite à cette première (résolue): https://www.developpez.net/forums/d2...ect-php-mysql/

    Pour faire simple, après avoir battu 4 images et 1 mot, je veux battre le scrabble (j'imagine que ça existe mais c'est pour mon développement perso).

    L'idée est de récupérer tous les mots possibles à partir d'une taille (min et max cette fois) de mot et d'une combinaison de lettres proposée (ça marche déjà voir lien ci dessus).

    Ensuite pour respecter les lettres de début/fin de mot et potentiellement en travers (un scrabble quoi) qui sont fixées, d'appliquer sur ce résultat un like du type:

    select name from firstresults where name like 'a%v%n' (là ça doit trouver avion par exemple).

    Vous allez me dire que je peux très bien amender ma requête du lien précédent en rajouant "and name like 'a%v%n' " oui, par contre avec mon système d'index ça risque de pu très bien marcher si l'optimiseur de requête ne veut plus l'appeler (j'ai déjà une chute de perf sur ma requête si j'appelle like et 2 colonnes pour les lettres... j'imagine pas avec les 26 colonnes de l'alphabet).

    Ma question est donc, est-ce possible de récupérer la liste précédente (une liste de string) et de réappliquer dessus une nouvelle requête avec mon like, sans passer par une table intermédiaire?
    J'ai bien pensé à récupérer la liste dans PHP et lui demander d'alimenter une table "temporaire" avec comme clé d'identification le numéro de session de l'utilisateur, puis d'appliquer le like sur cette table. Par contre ça fait pas mal d'aller/retour entre php et mysql, sans compter les opérations "d'entretiens" (delete des résultats de l'utilisateur quand il refait une recherche systématiquement, et trouver un moyen pour déclencher un nettoyage de la table après que l'utilisateur soit parti/inactif/ un certain temps)...

    Dans la même idée, est-ce que moins "coûteux" de traiter ces données directement avec php (j'imagine à coup de regex) que de faire appel au moteur de mysql? Et si oui, une idée, je suis pas au point avec les regex de manière générale?

    Merci

  2. #2
    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 : 59
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    J'ai bien pensé à récupérer la liste dans PHP et lui demander d'alimenter une table "temporaire"
    Pourquoi mets-tu des guillemets à table temporaire ?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TEMPORARY TABLE tempo SELECT * FROM table1 where id=554;

    Tu fais ensuite toutes les requêtes que tu veux sur cette petite table, et c'est très performant.
    Tu ne t'occupes pas du reste.
    Quand la session meurt, la table meurt.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre confirmé
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut
    Salut Dendrite!

    Merci pour l'idée, je savais pas qu'on pouvait faire des tables "volatiles" avec MySql, c'est vraiment pas mal ça!
    Au niveau de PHP, je dois imbriquer mes instructions dans la même fonction appelante, ou alors je peux créer ma table temporaire dans une fonction, puis l'utiliser et la réutiliser autant que je veux tant que l'utilisateur est connecté?
    Niveau multiutilisateur ça se passe comment? Dois-je créer un table avec un nom randomisé pour chaque utilisateur, ou alors la table temporaire est associée uniquement à la session de mon utilisateur?
    Histoire d'éviter que l'utilisateur A ai ses recherches qui vont se faire dans les données de l'utilisateur B...

    Sinon tu penses quoi d'utiliser une subquery en imbriquant ma recherche par signature dans un in, niveau performance?

    Par exemple pour retourner les mots (ici seul tonnage match sur mes 700 000+ entrées) respectant un certain pattern, et ayant la "signature" associé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select name from word where name like 't%' and name in (select name from word where a=1 and b=0 and c=0 and d=0 and e=1 and f=0 and g=1 and h=0 and i=0 and j=0 and k=0 and l=0 and m=0 and n=2 and o=1 and p=0 and q=0 and r=0 and s=0 and t=1 and u=0 and v=0 and w=0 and x=0 and y=0 and z=0)

  4. #4
    Membre confirmé
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut
    La solution de Dendrite fonctionne parfaitement, je vais tester avec ma subquery pour comparer, mais les performances avec la table Tempo sont tout à fait acceptable!

    Merci encore!

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

Discussions similaires

  1. [MySQL] Affichage résultat requête SQL dans page HTML comme un tableau
    Par joxbl dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 14/03/2011, 14h26
  2. Résultat requête dans une table
    Par guiguikawa dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 23/06/2006, 15h34
  3. [SQL] Affichage résultat requête dans un tableau, bouton affichage page
    Par megapacman dans le forum PHP & Base de données
    Réponses: 35
    Dernier message: 18/05/2006, 16h42
  4. Ajout Résultat Requête dans Table en VBA
    Par lito74 dans le forum Access
    Réponses: 4
    Dernier message: 24/02/2006, 15h43
  5. [VB]résultat requête dans un tableau
    Par blaiso dans le forum VB 6 et antérieur
    Réponses: 29
    Dernier message: 30/01/2006, 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