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,

    Je vois pas en quoi un "Out of memory" n'est pas assez explicite...
    T'as tables sont grosses par rapport à ton architecture ?
    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. 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. Bien noté. Merci ;)

          Et comment faire pour sélectionner les 3 tables ?
          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. 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. 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.