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

Outils MySQL Discussion :

Full-text sur plusieurs tables ?


Sujet :

Outils MySQL

  1. #1
    Membre actif Avatar de xender
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 93
    Par défaut Full-text sur plusieurs tables ?
    Bonjour, je voudrais savoir si il est possible de faire un recherche full-text sur plusieurs table en même temps?

    J'ai créé l'index full-text sur mes deux tables mais je n'arrive pas a faire m'a requète correctement sur phpmyadmin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM customer, coatings WHERE MATCH (company_name,regional_name,distirbutor,sales_rep) AGAINST ('toto')
    Voici ma table :
    CREATE TABLE `customer` (
    `story_number` int(11) NOT NULL auto_increment,
    `company_name` varchar(50) default NULL,
    `date` datetime default NULL,
    `regional_name` varchar(50) default NULL,
    `city` varchar(50) default NULL,
    `state_provence` varchar(4) default NULL,
    `distirbutor` varchar(50) default NULL,
    `sales_rep` varchar(50) default NULL,
    `picture` mediumblob,
    `permission` tinyint(1) default NULL,
    PRIMARY KEY (`story_number`),
    FULLTEXT KEY `company_name` (`company_name`,`regional_name`,`distirbutor`,`sales_rep`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=287 ;
    CREATE TABLE `coatings` (
    `story_number` int(11) default NULL,
    `coatings` varchar(50) default NULL,
    FULLTEXT KEY `coatings` (`coatings`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

  2. #2
    Membre confirmé Avatar de Nillak
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 138
    Par défaut
    tu as un "coatings.coatings" dans le MATCH, est-ce normal ?

  3. #3
    Membre actif Avatar de xender
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 93
    Par défaut
    oui désolé j'avais mis la mauvaise requète mais peux-tu m'aider à faire la requète pour rechercher le mot "toto" dans les deux tables?

  4. #4
    Membre confirmé Avatar de Nillak
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 138
    Par défaut
    Je n'ai pas trop le temps, si je ne te répond pas immédiatement c'est que je te répondrai demain, en plus je n'y connais pas grand chose à ces requêtes mais je veux bien t'aider, ça m'apprendra
    Peux tu essayer cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *, MATCH (company_name,regional_name,distirbutor,sales_rep) AGAINST ('toto') FROM customer, coatings
    et voici un lien à lire je pense ici

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Par défaut
    En mode normal, le MATCH doit obligatoirement utiliser les colonnes de l'index FULLTEXT. Comme tu ne peux pas faire d'index multi-tables, ça suppose que tu fasses deux MATCH au lieu d'un.

    En mode booléen (càd qu'il ne cherche pas à calculer la pertinence de toto, mais juste si toto est là ou pas), l'index n'est pas obligatoire, mais accélère bcp les recherches.

    Enfin, il serait souhaitable de faire une jointure entre les deux tables , j'imagine que c'est sur story_number.

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT * 
    FROM customer Cu
      INNER JOIN coatings Co 
        ON Cu.story_number = Co.story_number
    WHERE MATCH (company_name,regional_name,distirbutor,sales_rep) AGAINST ('toto' IN BOOLEAN MODE)
    OR MATCH(coatings) AGAINST ('toto' IN BOOLEAN MODE)

  6. #6
    Membre actif Avatar de xender
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 93
    Par défaut
    c'est génial ça marche bien merci Antoun tu m'enlève une épine du pied

    Dernière question :

    Si je veux faire la même chose mais sur trois tables ?

    CREATE TABLE `new_equipment` (
    `success_number` int(11) default NULL,
    `new_equipment` varchar(50) default NULL,
    FULLTEXT KEY `new_equipment` (`new_equipment`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    Que devient la requète? je veux juste savoir ou replacer les "INNER JOIN" et "ON", comme ça après je serai le faire pour n table

    D'avance merci

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Par défaut
    Quelle est la correspondance entre ta troisième table et (au moins) l'une des deux autres ?

  8. #8
    Membre actif Avatar de xender
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 93
    Par défaut
    success_number = story_number en fait c'est l'id qui les relient entre elles

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    FROM customer Cu
      INNER JOIN coatings Co ON Cu.story_number = Co.story_number
      INNER JOIN new_equipment N ON Cu.story_number = N.success_number
    ...

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

Discussions similaires

  1. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 14h54
  2. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 20h05
  3. order by sur plusieurs tables
    Par Mad_Max dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/12/2003, 13h17
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 18h50
  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, 17h26

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