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

Requêtes MySQL Discussion :

Requête sur 2 tables indépendantes


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut Requête sur 2 tables indépendantes
    Bonjour,

    J'ai 2 tables contenant des articles, j'aimerais qu'on puisse faire des recherches dans l'une ou l'autre, mais avec une seule requête. Les tables ont les mêmes champs.

    Actuellement, la requête est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT * FROM table1 $WHERE
    sachant que $WHERE est une concaténation de conditions.
    Jusque là, tout fonctionne.

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT * FROM table1,table2 $WHERE
    ça ne renvoie aucun résultat.

    J'ai essayé les jointures, sans succès. J'ai essayé aussi avec un WHERE basique, rien n'y fait.
    Quelqu'un a une idée ? Merci d'avance.
    Le mieux n'est pas forcément l'ennemi du bien.

  2. #2
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Bonjour,

    justement, quelles sont les conditions ?
    Cordialement,
    Christophe Charron

  3. #3
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Les conditions sont ainsi libellées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $motrecherche=explode(" ",$mots_cles); 
    		   $WHERE = "WHERE"; 
    		   $count = 0; 
    		   reset ($motrecherche); 
    		   while(list($key, $data) = each($motrecherche)) 
    			  { 
    			  $count = $count + 1; 
    			  if ($count == 1)   $WHERE .= "     texte LIKE '%" . $data . "%' OR titre LIKE '%" . $data . "%' ";  
    			  else               $WHERE .= " AND texte LIKE '%" . $data . "%' ";
    			  }
    Le mieux n'est pas forcément l'ennemi du bien.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Donc si $data vaut 'toto', ta requête est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT * 
    FROM table1,table2 
    WHERE texte LIKE '%toto%'
      OR titre LIKE '%toto%'
    Avec plusieurs mots recherchés, tu mélanges des OR et des AND. Pense aux parenthèses car A et (B ou C) n'est pas équivalent à (A et B) ou C.

    Ensuite, FROM table1, table2 fait un produit cartésien des deux tables. Si chaque table fait 1000 lignes, le résultat donnera 1000 x 1000 = 1 million de lignes !

    Pourquoi avoir fait deux tables d'articles avec les mêmes colonnes ? (et pas champs !)
    Cela dénote une mauvaise modélisation des données.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Merci pour ta réponse.
    Ce n'est pas une mauvaise modélisation, c'est juste que la première table existait bien avant la deuxième. Il serait compliqué d'y ajouter un identifiant de catégorie pour distinguer les entrées. De plus, les colonnes récupérées dans cette requête sont les mêmes, mais il y en a d'autres qui diffèrent sur chaque table.

    Le code indiqué est le seul que j'ai réussi à mettre en place pour chercher plusieurs mots-clés, mais si vous en connaissez un autre plus propre, je suis preneur !
    Le mieux n'est pas forcément l'ennemi du bien.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    Vous devriez vous en sortir en faisant un UNION avec vos deux tables.

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Freedolphin Voir le message
    Le code indiqué est le seul que j'ai réussi à mettre en place pour chercher plusieurs mots-clés, mais si vous en connaissez un autre plus propre, je suis preneur !
    Vite fait, ceci serait déjà mieux :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $motrecherche = explode(" ", $mots_cles); 
    $where = 'WHERE '; 
    $count = 0; 
    reset ($motrecherche); 
    while(list($key, $data) = each($motrecherche)) 
    { 
      $count = $count + 1; 
      IF ($count == 1)   
      {
        $where .= "(texte LIKE '%" . $data . "%' OR titre LIKE '%" . $data . "%') ";
      }
      else
      {
        $where .= " OR (texte LIKE '%" . $data . "%' OR titre LIKE '%" . $data . "%') ";
    }
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Malheureusement, Philippe, ton code ne renvoie aucun résultat.
    J'ai contourné le problème avec un bricolage qui fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $motscles = str_replace(" ", "%' AND texte LIKE '%", $motscles);
    $req = mysql_query ("SELECT DISTINCT * FROM table WHERE texte LIKE '%$word%'");
    Citation Envoyé par Waldar Voir le message
    Vous devriez vous en sortir en faisant un UNION avec vos deux tables.
    J'ai essayé mais sans résultat.
    Le mieux n'est pas forcément l'ennemi du bien.

Discussions similaires

  1. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 10h01
  2. Problème de requêtes sur deux tables
    Par Pymm dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2005, 10h06
  3. Requête sur plusieurs tables
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/07/2005, 13h25
  4. Requête sur 2 tables ?
    Par kibodio dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/03/2005, 16h57
  5. Requête sur 2 tables et surtout novice...
    Par kibodio dans le forum Langage SQL
    Réponses: 13
    Dernier message: 03/03/2005, 16h45

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