Base MySQL : comment faire ?
Thinkman
-
basile -
basile -
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 !
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 !
A voir également:
- Base MySQL : comment faire ?
- Base de registre - Guide
- Formules mathématiques de base - Télécharger - Études & Formations
- Mysql community download - Télécharger - Bases de données
- Exemple base de données access à télécharger gratuit - Forum Access
- Gigaset as470h base ✓ - Forum telephonie fixe
13 réponses
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
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
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 !!
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 !!
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
voilà!
Maily :-))))
Boumj'chtattrape
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
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...
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
...ce à chaque fois que ajoute une catégorie pour une entreprise, pour être tout à fait exact!
;-)
Maily :-))))
Boumj'chtattrape
;-)
Maily :-))))
Boumj'chtattrape
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é ?
" MySQL said:
Duplicate entry '2' for key 1"
Qu'est-ce que j'ai raté ?
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
en fait, dans cette table, il n'y a pas de clés primaires... ;-)
Maily :-))))
Boumj'chtattrape
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 !
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 !
Voilà en gros ce qu'il faut faire!!
Après, faut changer la mise en page comme toi tu veux... ;-)
ps: je t'ai corrigé aussi ta balise de lien!
Maily :-))))
Boumj'chtattrape
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
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 ?
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in TEST.php on line 96
Qu'en dis-tu ?
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....)
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....)