Requêtes multi tables SQL

Salutations,

Je cherche à effectuer une requête simple sur 3 tables d'une Base SQL (un moteur de recherche simple).
Pour cela, j'utilise un formulaire HTML, qui doit interroger les 3 bases "Ordinateurs", "Consoles" et "Jeux" sur un mot clef à rechercher dans les champs "Modele" des tables "Ordinateurs" ou "Consoles" ou "Titre" de la table "Jeux".
Le problème est que les champs diffèrent donc selon la table.

J'ai essayé :
$requet = "select * FROM Ordinateurs, Consoles, Jeux WHERE Jeux.Titre like '%$rch%' OR Ordinateurs.Modele like '%$rch%' OR Consoles.Modele like '%$rch%'";
Mais cela mouline trois plombes pour me sortir enfin :
"Erreur SQL !
select * FROM Ordinateurs, Consoles, Jeux WHERE Jeux.Titre like '%atmos%' OR Ordinateurs.Modele like '%atmos%' OR Consoles.Modele like '%atmos%'
MySQL client ran out of memory"

Ou ai-je donc cafouillé ? Je ne suis pas un pro. du tout...

A vous lire...

8 réponses

  1. BOnjour,

    En complément de la réponse de Pitet, je pense aussi que l'utilisation d'un from avec toutes les tables à suivre comme ça n'est pas top. au pire, s'il n'y a pas de relations entre ces tables, il faudrait faire 3 requêtes (1 sur chaque table), et les lier avec un union (+ utiliser un alias de colonne))
    Hésites pas à demander si tu as besoin pour le union et/ou l'alias.

    Et je redit : c'est en complément de la réponse précédente ;) il faut aussi utiliser le like.
    1. Salut,

      Si tu veux faire une recherche avec le wildcard % il faut utiliser l'opérateur LIKE à la place de =

      $requet = "SELECT Jeux.Titre, Ordinateurs.Modele, Consoles.Modele".
      " FROM Jeux, Ordinateurs, Consoles".
      " WHERE Jeux.Titre LIKE '%$rch%' OR Ordinateurs.Modele LIKE '%$rch%' OR Consoles.Modele LIKE '%$rch%' LIMIT 10";

      Bonne journée
      1. Je viens d'essayer le code suivant, mais cela mouline beaucoup et ne semble rien retourner, pourtant les recherches effectuées sont des mot clefs présents dans la base :
         $requet = "SELECT Jeux.Titre, Ordinateurs.Modele, Consoles.Modele".
        " FROM Jeux, Ordinateurs, Consoles".
        " WHERE Jeux.Titre = '%$rch%' OR Ordinateurs.Modele = '%$rch%' OR Consoles.Modele = '%$rch%'";
        " LIMIT 10";

        $req = mysql_query($requet) or die('Erreur SQL !<br />'.$requet.'<br />'.mysql_error());

        Ou est l'erreur ?
        1. Bien noté. Merci ;)

          Et comment faire pour sélectionner les 3 tables ?
          1. Salut,

            Si tu n'as pas besoin de récupérer tous les champs des tables, il est conseillé de définir explicitement les champs à récupérer dans la clause SELECT plutôt que d'utiliser le sélecteur *. Ça permettra d'économiser un peu de mémoire.

            Bonne journée
            1. Je pense que c'est la requête qui n'est pas bonne dans sa nomenclature.
              Les mêmes tables, interrogées via d'autres requêtes, répondent individuellement très rapidement. Ils y a moins de 1500 entrées par tables.
              1. Bonjour,

                Je vois pas en quoi un "Out of memory" n'est pas assez explicite...
                T'as tables sont grosses par rapport à ton architecture ?