Requêtes multi tables SQL

Fermé
WDAssos Messages postés 59 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 10 septembre 2013 - Modifié par jipicy le 16/12/2013 à 17:45
ndsaerith Messages postés 308 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 10 mai 2017 - 11 sept. 2013 à 15:28
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

juliencolin54 Messages postés 217 Date d'inscription dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 55
5 sept. 2013 à 15:13
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 samedi 1 décembre 2007 Statut Membre Dernière intervention 10 septembre 2013
Modifié par jipicy le 16/12/2013 à 17:45
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
6 sept. 2013 à 16:02
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 samedi 1 décembre 2007 Statut Membre Dernière intervention 10 septembre 2013
Modifié par jipicy le 16/12/2013 à 17:45
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 dimanche 22 juillet 2012 Statut Membre Dernière intervention 1 octobre 2013 55
9 sept. 2013 à 13:50
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 samedi 1 décembre 2007 Statut Membre Dernière intervention 10 septembre 2013
Modifié par jipicy le 16/12/2013 à 17:45
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
11 sept. 2013 à 14:07
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 vendredi 16 janvier 2004 Statut Membre Dernière intervention 10 mai 2017 28
11 sept. 2013 à 15: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