Requêtes multi tables SQL

WDAssos Messages postés 59 Date d'inscription   Statut Membre Dernière intervention   -  
ndsaerith Messages postés 308 Date d'inscription   Statut Membre Dernière intervention   -
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...
A voir également:

8 réponses

juliencolin54 Messages postés 217 Date d'inscription   Statut Membre Dernière intervention   55
 
Bonjour,

Je vois pas en quoi un "Out of memory" n'est pas assez explicite...
T'as tables sont grosses par rapport à ton architecture ?
0
WDAssos Messages postés 59 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
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
0
WDAssos Messages postés 59 Date d'inscription   Statut Membre Dernière intervention  
 
Bien noté. Merci ;)

Et comment faire pour sélectionner les 3 tables ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
juliencolin54 Messages postés 217 Date d'inscription   Statut Membre Dernière intervention   55
 
Bonjour,

tu peux faire comme ceci,

SELECT table1.champ1, table2.champ1, table3.champ1, table3.champ2 FROM table1, tablle2, table3


Si je peux te conseiller une documentation, voici : https://www.w3schools.com/sql/sql_select.asp

Cdlt,
0
WDAssos Messages postés 59 Date d'inscription   Statut Membre Dernière intervention  
 
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 ?
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
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
0
ndsaerith Messages postés 308 Date d'inscription   Statut Membre Dernière intervention   28
 
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.
0