nyl auster Posté 13 Mai 2007 Posté 13 Mai 2007 (modifié) Hello J'aurais besoin de votre avis sur une de mes requête sql. Suite à une erreur de distraction, je me suis rendu compte qu'un des champs de ma table images étaient mal rempli: celui qui devait lier les images au numéro du jeu correspondant. Ce qui fait que je ne peux pas récupérer les images d'un jeu avec une simple requête sql du type : SELECT * FROM tables_images WHERE ID=numero du jeu désiré En revanche, je peux récupérer les images en faisant appel à une table intermédiaire. Seulement cela donne une requête particulièrement alambiquée (voir ci-dessous). Si dans la pratique ça fonctionne, est ce que ce type de requête n'est pas beaucoup trop lourde à gérer? est ce que je peux me contenter de ce systeme-D, ou bien il vaut mieux que je retrousse mes manches pour rajouter la données manquante (ID du jeu correspondant) sur chaque ligne de ma table images qui compte tout de même mille entrées aujourd'hui if ($_POST['type']=='images') { //J'explose la chaine pour mettre chaque mot dans une partie du tableau $tab=explode(" " , $mot); //je compte le nombre d'éléments qu'il y a dans le tableau $nb=count($tab); //si la recherche est complète, je fais une requête à partir du tableau de chaine de caractères explosées $sql="select ID from fiches_de_jeux WHERE nom_du_jeu OR mots_clefs like '%$mot%' "; //on prépare la requête SQL. $resultat = mysql_query("$sql") or die(mysql_error()); // Je stocke dans un tableau toutes les ID des différetes fiches de jeu correspondant au jeu demandé $tableau_ID=array(); $i=0; while ($resultats = mysql_fetch_array($resultat) ) { $tableau_ID[$i]=$resultats['ID']; $i++; }//fin de la boucle de recherche //je compte le nombre d'entrée du tableau $nb=count($tableau_ID); // Je sélectionne toutes les news liée à ces numéro de fiche de jeu. Il y a quatre colonnes : ID_fiche, IDfiche-2, IDfiche_3, ID_fiche4, //je dois toutes les controler $sql="SELECT ID FROM news WHERE id_fiche=\"$tableau_ID[0]\""; // si il y a plusiers ID de fiches de jeu, j'allonge la requête SQL, et je controle chaque colonne (les 4 colonnes ID_fiche) if($nb>0) { for($i=1; $i<$nb; $i++) { $sql.=" OR id_fiche=\"$tableau_ID[$i]\""; } } $sql.=" OR id_fiche2 =\"$tableau_ID[0]\""; if($nb>0) { for($i=1; $i<$nb; $i++) { $sql.=" OR id_fiche2=\"$tableau_ID[$i]\""; } } $sql.=" OR id_fiche3 =\"$tableau_ID[0]\""; if($nb>0) { for($i=1; $i<$nb; $i++) { $sql.=" OR id_fiche3=\"$tableau_ID[$i]\""; } } $sql.=" OR id_fiche4 =\"$tableau_ID[0]\""; if($nb>0) { for($i=1; $i<$nb; $i++) { $sql.=" OR id_fiche4=\"$tableau_ID[$i]\""; } } //j'exécute la requête pour obtenir tous les numéros de news qui parle du jeu désiré $resultat = mysql_query("$sql") or die(mysql_error()); //je stocke dans un tableau les ID de ces news $numero_news=array(); $i=0; while ($resultats = mysql_fetch_array($resultat) ) { $ID=$resultats['ID']; $numero_news[$i]=$ID; $i++; } $nb=count($numero_news); //maintenant je compose la requête qui parcourera la table images en cherchant les images qui correspondent aux news $sql="SELECT gif FROM images_news WHERE id_news=\"$numero_news[0]\""; if($nb>0) { for($i=1; $i<$nb; $i++) { $sql.=" OR id_news=\"$numero_news[$i]\""; } } $resultat = mysql_query("$sql") or die(mysql_error()); $images_news=array(); $i=0; // Je stocke le resultat (liens images) dans un tableau que j'appelerais ensuite avec la fonction join while ($resultats = mysql_fetch_array($resultat) ) { $gif=$resultats['gif']; $images_news[$i]=$gif; $i++; }//fin de la boucle de recherche Modifié 13 Mai 2007 par nyl auster
petit-ourson Posté 13 Mai 2007 Posté 13 Mai 2007 Je pense que ton modèle de données est à revoir. Ce que tu nous as montré n'est pas vraiment une requête, mais plutôt un script.
nyl auster Posté 13 Mai 2007 Auteur Posté 13 Mai 2007 arf oui c'est bien la solution la plus raisonnable que de corriger le défaut de la base de données, il va falloir que je trouve le temps (ce qui va être difficile) de le faire d'où ma tentative désespérée de ce script que j'ai fait hier soir pou tenter de m'en sortir quand même...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant