Base MySQL : comment faire ?

Fermé
Thinkman - 22 nov. 2004 à 11:36
 basile - 29 nov. 2004 à 11:20
Salut à tous,

J'ai construit une BDD en PHP/MySQL, dont les champs sont les suivants :

id - nom - alphabet - categorie - web.
L'idée est d'afficher la liste des exposants d'un petit salon sur un site web. Certains exposants peuvent appartenir à plusieurs catégories.

Ce qui fait que je me retrouve avec une liste interminable et redondante de noms, car à chaque fois qu'un exposant a coché plusieurs catégories, il apparait sur autant de lignes...

Comment faire pour ne pas afficher toutes les "lignes" de la base, et faire en sorte que, devant chaque exposant, toutes les catégories auquel il appartient soient regroupées ?

Merci d'avance !

13 réponses

maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
22 nov. 2004 à 11:50
Bonjour!!

Tout d'abord, tu ne peux pas mettre dans un même champs plusieurs valeurs sans dupliquer les autres informations!

L'idéal, c'est que tu fasses 2 tables:

id, nom, alphabet et web

la seconde:

id, catégorie.

Pour chaque entreprise qui a plusieurs catégories, tu crées une ligne dans la 2ème table.
C'est la seule solution!! ;-) Enfin, la seule que je vois!

Bonne journée!

Maily :-))))
Boumj'chtattrape
0
Merci pour ce premier conseil éclairé !!!

Mais... Comment dois-je faire pour relier la première table à la seconde ?

Question subsidiaire : comment rendre "cliquable" l'URL que j'ai mise dans le champ "Web" ?

Merci beaucoup d'avance !!
0
maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
22 nov. 2004 à 12:05
Ces deux tables sont reliées par l'id...
l'id qui est dans la première table pourra apparaitre plusieurs fois dans la seconde selon si l'entreprise à plusieurs catégories!!

Pour la dernière question, au moment ou tu l'affiches, il faut que tu l'écrives avec les balises HTML
<a href="tonAdresseWeb.html">tonAdresseWeb.html</a>


voilà!

Maily :-))))
Boumj'chtattrape
0
D'aaaaaaaaccord...

Il suffit donc qu'au lieu de laisser l'ID s'incrémenter automatiquement, je mette sa valeur dans la table 2, et ce, à chaque fois que j'ajoute une catégorie, c'est ça ?

Merci encore...
0

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

Posez votre question
maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
22 nov. 2004 à 12:30
...ce à chaque fois que ajoute une catégorie pour une entreprise, pour être tout à fait exact!

;-)

Maily :-))))
Boumj'chtattrape
0
Damn' it, cela ne fonctionne pas ! Quand je veux entrer deux fois le même id, voici ce que j'obtiens :

" MySQL said:
Duplicate entry '2' for key 1"

Qu'est-ce que j'ai raté ?
0
maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
22 nov. 2004 à 14:03
Il faut que tu dises que ce champs n'est pas la clé primaire de la table...
en fait, dans cette table, il n'y a pas de clés primaires... ;-)

Maily :-))))
Boumj'chtattrape
0
Merci pour cette précision...

Et du côté de la requête SQL, comment faire pour attaquer les deux bases ?

Actuellement, voici ce que j'ai :

<?php
$db = mysql_connect('sql.taratatatsointsoin.com', taratatatsointsoin.com', 'motdepasse');
mysql_select_db(taratatatsointsoin.com',$db);
$query = "SELECT nom,categorie,web FROM exposants ORDER BY nom";
$result = mysql_query($query);
while($row = mysql_fetch_row($result)){
$categorie = $row[0];
$nom = $row[1];
$web = $row[2];
echo "<tr>\n
<td><span class=bodyhome>$nom</span></td>\n
<td><span class=bodyhome><font color=#6352AD><b>$categorie</b></font></span></td>
<td><span class=bodyhome><a href=\"$web\"></a>$web</span></td>\n
</tr>\n";
}
mysql_close();
?>

PS : penses-tu que la ligne <a href... est correctement écrite pour afficher une URL cliquable ?

Merci encore d'avance beaucoup again !
0
maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
23 nov. 2004 à 11:18
Voilà en gros ce qu'il faut faire!!
Après, faut changer la mise en page comme toi tu veux... ;-)

<?php
$db = mysql_connect('sql.taratatatsointsoin.com', taratatatsointsoin.com', 'motdepasse');
mysql_select_db(taratatatsointsoin.com',$db);
$query = "SELECT nom,web,id FROM exposants ORDER BY nom";
$result = mysql_query($query);
while($row = mysql_fetch_row($result)){
      $query2= "SELECT categorie FROM categorie WHERE id=".$row[2];
      $result2 = mysql_query($query2);
      $categorie = $row[0];
      $web = $row[1];
      echo "<tr>\n <td><span class=bodyhome>$nom</span></td>\n
<td><span class=bodyhome><a href=\"$web\">$web</a></span></td>\n
</tr>\n";
      while($row2== mysql_fetch_row($result)){
         echo "<td><span class=bodyhome><font color=#6352AD><b>$row[0]</b></font></span></td>";
     }
}
mysql_close(); 



ps: je t'ai corrigé aussi ta balise de lien!

Maily :-))))
Boumj'chtattrape
0
Oups, voici que j'obtiens comme rendu sur ma page PHP :

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in TEST.php on line 96

Qu'en dis-tu ?
0
C'est pas du tout comme ça que j'auras fait...
table exposant :
id_exp - nom - alphabet - web
table categorie :
id_cat - categorie
table liaison :
id_exp - id_cat

qd tu ajoute un exposant, tu demnde les categories :
- tu cré l'exposant dans la table
- tu cré autant de liaison que de categorie dans la table liaison

qd tu veux afficher la liste des exposants, la requete est :
$sql = 'select exposant.id_exp, exposant.nom, exposant.alphabet, exposant.web from `exposant`' ;
... tu affiche nom, alphabet et web, et tu met id_exp dans la variable $id_exp pour la requete suivante :

et qd tu veux la liste des catégories de chaque exposant :
$sql = 'select categorie.categorie from `categorie`, `liaison`
where categorie.id_cat=liaison.id_cat and liaison.id_exp='.$id_exp ;

le reste, c'est de l'affichage pur...

(et si vous le pouvez, prenez des cours ou lisez des bouquins, un des premiers trucs qu'on apprend sur les bases de données, c'est de ne jamais avoir une table sans clé primaire....)
0
Merci de ta contribution.

Dans ce cas, quelle serait la syntaxe des requêtes SQL ?

Je me suis effectivement procuré "PHP/MySQL pour les Nuls", mais je crois que je n'ai définitivement pas l'esprit tourné vers ce type de programmation. Je suis plutôt un graphiste, à la base...
0
ben je les ai notées au dessus....
si tu veux plus d'aide il me faudrait plus d'infos : la source de ton php, et la structure de ta base sql (noms des tables, nom et type des champs)...
envoi moi tout ça en privé par mail : jerome.biguet (at) chello.fr
0