Selection multi table

Mammouth du PHP | 686 Messages

22 nov. 2008, 16:00

Bonjour, j'essaie de faire une selection sur plusieurs table mais je n'y arrive pas
$sql = mysql_query("SELECT `coupes_trophees`.*, `gravures`.*, `medailles`.* FROM coupes_trophees, medailles, gravures  WHERE reference LIKE '$reference'");

ViPHP
ViPHP | 3607 Messages

22 nov. 2008, 16:08

Euh
Je ne croit pas que l'on puisse faire un SELECT nomtable.*, il faut spécifier le nom des champs, as-tu essayé?

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

22 nov. 2008, 16:08

:afraid:
  1. Sélectionner des champs de plusieurs tables,
    sans construire de jointure entre les tables,
    c'est créer un produit cartésien !
  2. Toujours écrire sa requête dans une variable, puis l'exécuter
    au lieu de faire les deux en une seule opération.
  3. Extraire les variables des chaînes de caractères.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

22 nov. 2008, 16:23

Les rappels 2 et 3 donnent donc :
$sql = "SELECT ...... FROM coupes_trophees, medailles, gravures WHERE reference LIKE '%".$reference."%'"; 
$res = mysql_query($sql) or die(mysql_error()); 
Je te laisse corriger le 1er.

J'oubliais une 4e recommandation : un LIKE fonctionne mieux avec les caractères génériques % ;)

ViPHP
ViPHP | 3607 Messages

22 nov. 2008, 16:27

Et j'ajouterais que si par hasardn tu n'avais pas besoin des caractères générique, autant mettre un = à la place du LIKE, c'est ultra plus rapide ;)

Mammouth du PHP | 686 Messages

22 nov. 2008, 16:46

j'ai fait ceci mais il ne me recupère rien
$sql = mysql_query("SELECT prix FROM coupes_trophees, gravures, medailles WHERE coupes_trophees.reference = '$reference'");
$nbr=mysql_num_rows($sql);
if($nbr > 0){
while($result=mysql_fetch_array($sql)){
$prix = $result['prix'];
}
}

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

22 nov. 2008, 16:55

Le code que tu viens d'indiquer ne prenant en compte
aucune des 5 recommandations faites plus haut,
je ne vois rien à ajouter. |(X

Mammouth du PHP | 686 Messages

22 nov. 2008, 17:02

J'ai cree ma requette dans une variable et utilisé le =
Peut etre serai ce mieux comme ceci alors ?
$sql = "SELECT `coupes_trophees`.`prix`, `gravures`.`prix`, `medailles`.`prix` FROM coupes_trophees, medailles, gravures WHERE reference = '$reference''";  
$res = mysql_query($sql) or die(mysql_error());
$nbr=mysql_num_rows($res); 
if($nbr > 0){ 
while($result=mysql_fetch_array($res)){ 
$prix = $result['prix']; 
} 
}


ViPHP
ViPHP | 3607 Messages

22 nov. 2008, 17:39

Oui? et qu'est-ce que ça donne? des erreurs, aucuns résultats?
Sinon essaye de différencier les noms de colonnes, genre:

Code : Tout sélectionner

coupe_trophees.prix as ct_prix, gravures.prix as g_prix....
Mais que contiennent ces collonnes?, qu'est-ce que tu veux récupéré au fait? pourquoi plusieurs tables ?

Mammouth du PHP | 686 Messages

22 nov. 2008, 21:13

en fait j'ai un catalogue ou j'ai des articles qui sont des coupes, des medailles et des coupes, je souhaite recuperer le prix d'un article a partir de se reference donc faire une recherche dans les 3 tables.
Il me recupere bien ce qu'il faut sauf qu'il me met 46 pages avec le même resultat