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 :

Utiliser substring d'un champ indexé dans une jointure.


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Développeur Full Stack
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Utiliser substring d'un champ indexé dans une jointure.
    Bonjour,

    En gros, j'ai 2 tables a et b, que j'aimerais joindre par le champ 'test'. Je fais donc :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from a,b where a.test = b.test

    Ca marche vite et bien.
    Maintenant, il s'avère que les 2 tables sont sur des serveurs différents, et les champs n'avaient pas vocation à être unis. Ils ne sont donc pas formattés pareil.

    Je me retrouve à les faire correspondre, comme ceci :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    substring(a,1,10) = substring(b,5,10)
    Et là, au niveau performances, c'est catastrophique.

    Vous auriez une solution, sachant que les champs a et b sont déjà indexés ?

    Merci d'avance,
    Nico.

  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
    Deja une jointure s'écrit comme ça :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT colonnes FROM a
    JOIN b ON a.test = b.test

    Ensuite pour ton problème, faire une jointure sur une une fonction appliquée à une colonne est evidemment catastrophique.
    Tu n'as pas d'autre solution que d'aligner tes valeurs de jointure, cela peut passer par une colonne supplémentaire.

  3. #3
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Tu peux aussi reformater un des 2 champs et adapter les pages y faisant référence.
    Un travail à faire 1 fois.

    J'ai eu plusieurs champs à reformater car l'interface chaise-clavier merdait complètement -> passage d'un champs texte à un index des nouvelles tables créée pour obtenir un choix déroulant en final.
    J'ai su faire 80% en automatique via un script et le reste a eu besoin de modifications manuelles ayant comme cause la dite interface ci-dessus et ses erreurs.

Discussions similaires

  1. [MySQL] Dernière entrée pour un champs spécifique dans une jointure
    Par boggwuro dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/02/2014, 01h26
  2. Réponses: 3
    Dernier message: 14/10/2010, 16h29
  3. Réponses: 6
    Dernier message: 23/01/2007, 10h17
  4. utilisation du contenu d'un champ edit dans une requete sql
    Par amri2006 dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/01/2006, 16h05

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