Gribouille26 Posté 18 Février 2005 Auteur Posté 18 Février 2005 J'ai retourné le problème dans tous les sens, et aucun ne me paraît plus évident... Sauf, peut-être ... de mettre id_cat dans le table image. Et donc de supprimer la table icone_cat pour laquelle je n'arrive pas à trouver la clef.... Ca ralentirai beaucoup les requètes? Gribouille
Anonymus Posté 18 Février 2005 Posté 18 Février 2005 Sauf, peut-être ... de mettre id_cat dans le table image. Et donc de supprimer la table icone_cat pour laquelle je n'arrive pas à trouver la clef.... Bien vu, c'est exactement la méthode à adopter. Logiquement : A une icone correspond une et une seule catégorie. Donc, id_cat va dans la table image. La table icone_cat ne te sert plus à rien. En fait, elle pourrait servir si tu affectais une à plusieurs catégories par icone, et une à plusieurs icones par catégories. Sans ces 2 conditions, il n'y a pas besoin de table de jointure. Pour info, s'il y en avait eu une, elle n'aurait pas de clé. Pourquoi ? Parce que les 2 clés (id_icone et id_cat) forment une clé à elles seules. Ainsi, le 'couple' id_icone 1 et id_cat 3 doit être unique. (quoique, mais.. c'est pour simplifier..)
Gribouille26 Posté 18 Février 2005 Auteur Posté 18 Février 2005 Effectivement, je n'avais pas pensé à ça, mais l'idée de la base de données vient justement du fait qu'une icone peut se retrouver dans plusieurs catégories !!! Mince!!! Mais comme les catégories seront des chiffres, Il n'y a pas de risque d'erreur en remplissant un éventuel champ id_cat dans le table icone... Et si j'en met plusieurs (de catégories) et que je les sépare comme dans clef_icone (par des espaces), je peux y faire une recherche pour les sortir dans plusieurs catégories? Gribouille
Gribouille26 Posté 19 Février 2005 Auteur Posté 19 Février 2005 Voyez-vous un problème à mettre ce nouveau champ en plus dans la table icone Des ralentissments dans les requêtes? Gribouille
Anonymus Posté 19 Février 2005 Posté 19 Février 2005 Aucun problème, et les légers ralentissements que tu pourrais rencontrer commenceraient à partir d'un bon millier d'icones (et encore..) Quel champ ?
Gribouille26 Posté 20 Février 2005 Auteur Posté 20 Février 2005 J'en ai déjà bien plus d'un milliers... et j'espère bientôt encore plus... Alors, je vais peut-être garder les trois tables si ça va plus vite... Pas besoin de définir de clef primaire dans la table cat_icone, donc !? Mais mySQl m'en réclame une... J'ai deux choix: clef primaire et index. Je ne comprend pas ce qu'est "index". C'est le champ id_cat que je voudrais rajouter à la table icone. Gribouille
Gribouille26 Posté 23 Février 2005 Auteur Posté 23 Février 2005 Bon, je ne sais toutjours pas s'il faut mieux faire une table ou deux... Et je ne comprend pas cet index... Gribouille
Anonymus Posté 23 Février 2005 Posté 23 Février 2005 Tu fais une table image, une table catégorie. Dans ces tables, tu mets un index et une cle primaire. Puis tu fais une table de jointure, où tu mets l'id de l'image, et l'id de la catégorie. S'il insiste tant, mets lui un index, ce n'est pas génant. Nico.
Gribouille26 Posté 25 Février 2005 Auteur Posté 25 Février 2005 Oups, j'avais pas vu ta réponse.... Tu fais une table image, une table catégorie. Dans ces tables, tu mets un index et une cle primaire. <{POST_SNAPBACK}> Je comprend qu'un index sert à une recherche plus rapide, mais je ne sais à qui l'attribuer.... J'ai trouvé cette explication, mais c'est pas très clair sur la différence entre une clef primaire et un index. Un index est un objet complémentaire (mais non indispensable) à la base de données permettant d'"indexer" certaines colonnes dans le but d'améliorer l'accès aux données par le SGBDR, au même titre qu'un index dans un livre ne vous est pas indispensable mais vous permet souvent d'économiser du temps lorsque vous recherchez une partie spécifique de ce dernier...Toutefois la création d'index utilise de l'espace mémoire dans la base de données, et, étant donné qu'il est mis à jour à chaque modification de la table à laquelle il est rattaché, peut alourdir le temps de traitement du SGBDR lors de la saisie de données. Par conséquent il faut que la création d'index soit justifiée et que les colonnes sur lesquelles il porte soient judicieusement choisies (de telle façon à minimiser les doublons). De cette façon certains SGBDR créent automatiquement un index lorsqu'une clé primaire est définie. Gribouille
Anonymus Posté 26 Février 2005 Posté 26 Février 2005 Pour l'exemple suivant : id_personne, nom,age,sexe,adresse,ville Bon, a priori, on mettra le id_personne en index. En effet, on considère qu'il sera en cle primaire, et comme le dit le second paragraphe de ton 'quote', les cle primaires sont (presque) automatiquement en 'index'. Mais, imaginons que le programme requiert très souvent des recherches par ville, car c'est un element capital dans ce programme. On pourrait mettre 'ville' en index. La recherche sera ainsi accélérée. Il sera fait (grosso modo) une table spéciale 'id_personne','ville', qui permettra de trouver très rapidement la ville désirée. Ceci dit, comme expliqué, il ne faut pas non plus tout mettre en index. Il ne faut pas mettre 'id_personne, nom,age,sexe,adresse,ville', l'ensemble des champs en index. Là, le problème serait inverse. Ca n'accelererait pas la recherche, ca pourrait meme la ralentir, ca il y aurait alors trop de champs (et notamment des champs inutiles), en index. Bref, il faut savoir à quoi l'on destine son programme, pour choisir des index intéressants, sans pour autant en choisir trop. Nico.
Gribouille26 Posté 1 Mars 2005 Auteur Posté 1 Mars 2005 Merci beaucoup de ta patience, Nico !! Gribouille
Gribouille26 Posté 2 Mars 2005 Auteur Posté 2 Mars 2005 Salut, je suis de retour... J'ai créé la base de données. J'ai réussi à m'y connecter, à y faire des requètes simples, mais quand il s'agit qde retrouver une information en passant par la table de jointure, ça se complique.... J'ai beau lire et relire les explications, je ne comprend pas trop la syntaxe.... Je voudrais connaître, par exemple, l'url des icones qui font partit d'une catégorie donnée (la 1): $requete = "SELECT url_icone, id_icone, id_cat FROM icone, categorie, icone_cat WHERE id_cat=1"; Mais la requète échoue... Gribouille
Anonymus Posté 2 Mars 2005 Posté 2 Mars 2005 Bonjour, Donnes nous la synthaxe exacte de ta base nouvellement créée Nico.
Gribouille26 Posté 2 Mars 2005 Auteur Posté 2 Mars 2005 Ma base de données: table1: icone id_icone, clef_icone, url_icone table2: categorie id_cat, nom_cat table3: icone_cat id_cat, id_icone (les champs écrits en violet sont les clefs primaires) C'est bien ça que tu veux voir? Gribouille
Titag Posté 2 Mars 2005 Posté 2 Mars 2005 Mais la requète échoue... Tu as un message d'erreur ? Sinon pour ta requete : $requete = "SELECT url_icone FROM icone i , icone_cat ic WHERE ic.id_cat=1 AND i.id_icone=ic.id_icone"; En gros : on va chercher dans les tables icone_cat et icone les enregistrements qui répondent à la regle : "la catégorie doit être egale à 1". "i.id_icone=ic.id_icone" quant à lui fait le lien entre les deux tables. N.B. : Tu as remarqué que tu peux nommer te tables dans les requetes. ex "i" pour la table icone et "ic" pour la table icone_cat.
Gribouille26 Posté 2 Mars 2005 Auteur Posté 2 Mars 2005 Salut, Titag. Oui, j'ai un message puisque j'ai mit: $result = mysql_query($requete) or die("Requete echouee"); pour savoir où ça ne marche pas. N.B. : Tu as remarqué que tu peux nommer te tables dans les requetes. ex "i" pour la table icone et "ic" pour la table icone_cat. <{POST_SNAPBACK}> Il suffit de marquer leur nouveau nom à côté de l'ancien dans le FROM pour les renommer? Merci, Titag. J'ai à peu près compris, et ça marche très bien, en tout cas. Et plus compliqué encore!!! Trouver l'url des icones qui correspondent à la catégorie "machin". $requete = "SELECT url_icone FROM icone i , icone_cat ic, categorie c WHERE c.nom_cat=machin"; Mais comment faire le lien entre les trois tables? Gribouille
Anonymus Posté 2 Mars 2005 Posté 2 Mars 2005 En fait, pour faire un lien entre 2 tables, il suffit de.. faire un lien AND ic.id_cat=c.id_cat Donc, pour lier plusieurs tables, il suffit de multiplier ces conditions. Ca donnerait : $requete = "SELECT url_icone FROM icone i , icone_cat ic, categorie c WHERE c.nom_cat='machin' AND ic.id_cat=c.idcat AND ic.id_icone=i.id_icone"; Nico.
Gribouille26 Posté 2 Mars 2005 Auteur Posté 2 Mars 2005 Merci beaucoup à vous deux !!! Je vais aller approfondir et tester un peu ça plus avant. Gribouille
Gribouille26 Posté 2 Mars 2005 Auteur Posté 2 Mars 2005 J'ai jonglé un peu et j'arrive à refaire d'autre requètes sur 1, 2, 3 tables. Pour voir si j'ai bien compris: la syntaxe d'une requète: SELECT champ FROM table WHERE condition puis, pour lier des tables: AND table.champ=autretable.memechamp (1 AND si deux tables, 2 AND si 3tables....) J'ai trouvé cette technique pour afficher les résultats: echo "<table>\n";while($line = mysql_fetch_assoc($result)) { echo "\t<tr>\n"; foreach($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; }echo "</table>\n"; Mon problème est, maintenant, pour afficher les images à la place de leur url stochées dans la base de données. J'ai bien compris qu'il faut reconstruire le début de l'url de l'icone... <img src="http://www.monsite.com/images/".$image."> J'ai essayé d'introduire ça dans la deuxième ligne, en mettant $result à la place de $image, mais sans succès... Gribouille
Titag Posté 3 Mars 2005 Posté 3 Mars 2005 Salut, Il faut que tu fasses : echo "<img src=\"http://www.monsite.com/images/".$image."\">"; Sinon pour les requètes tu as compris le principe
Titag Posté 3 Mars 2005 Posté 3 Mars 2005 Re, Je suis allé un peu vite dans ma réponse. Admettons que ta requete te retourne des résultats avec trois valeurs, par exemple, nom_image, cat et id_image. Pour afficher les résultat tu peux faire : $result = mysql_query($req);if ($result) { while ($ligne = mysql_fetch_object($result)) { echo "<img src=\"www.monsite.com/images/".$ligne->nom_image."\">";} Par exemple. Ici tu "pointe" le nom du champ obtenu de la base en faisant $ligne->le_nom_du_champ.
Gribouille26 Posté 7 Mars 2005 Auteur Posté 7 Mars 2005 Merci Titag!! Merci ZN, mais je ne suis pas anglaise, et je ne veut pas d'un script tout fait... Gribouille
Gribouille26 Posté 21 Mars 2005 Auteur Posté 21 Mars 2005 Admettons que ta requete te retourne des résultats avec trois valeurs, par exemple, nom_image, cat et id_image. Pour afficher les résultat tu peux faire : $result = mysql_query($req);if ($result) { while ($ligne = mysql_fetch_object($result)) { echo "<img src=\"www.monsite.com/images/".$ligne->nom_image."\">";} Par exemple. Ici tu "pointe" le nom du champ obtenu de la base en faisant $ligne->le_nom_du_champ. <{POST_SNAPBACK}> Salut, Ma requète ne retournera que l'image. Je n'arrive pas à afficher les résultats sous forme d'image. Je les ai sous forme d'URL, mais je n'arrive pas à les avoir en image... J'ai apparement un $ en trop sur la ligne 30, mais la ligne 30 de mon éditeur de code fait apparaitre </body> !! Une idée ? Gribouille
Titag Posté 21 Mars 2005 Posté 21 Mars 2005 Oui, En général lorsque tu as un "parse error" (car c'est ca n'est-ce pas ?), c'est que tu as oublié un ; ou un " quelque part... Tu peux nous montrer ton code ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant