Bonjour,
je dois créer une base de donnée avec des clients et des fournisseur,
je dois créer une table de liaison? comment?
dois-je utiliser des clef etrangéres?
Je trouve pas de tuto la dessus quelqu'un peut m'aider?
Corentin
Version imprimable
Bonjour,
je dois créer une base de donnée avec des clients et des fournisseur,
je dois créer une table de liaison? comment?
dois-je utiliser des clef etrangéres?
Je trouve pas de tuto la dessus quelqu'un peut m'aider?
Corentin
une table de liaison c'est conceptuel.
dans ton cas ca sera juste un table qui associe un id de chacune des deux autres tables.
concernant les clefs etrangères, ce n'est déjà possible qu'avec des bases Innodb, et ce n'est pas essentiel.
Quelle liaison vas-tu faire entre les clients et les fournisseurs ?
Le fait que ce sont des entreprises de types différents ?
Sinon, contrairement à sabotage, je recommande fortement l'usage des clés étrangères si tu ne veux pas une base qui risque d'avoir des données pourries un jour ou l'autre.
Voir à ce sujet l'article (un peu sec parfois) de SQLPro
Les arguments de cet article sont surtout vrais pour de grosses structures.
Ce que je voulais surtout dire c'est qu'une application peut vivre sans contraintes de clefs ; concernant la sanité de la base, elle serait la même sans contraintes qu'avec des contraintes mal définies.
Et pour Mysql, il y a un choix à faire entre Innodb et Myisam. Exiger des contraintes c'est mettre Myisam a la poubelle, ce qui serait peut etre un peu hatif.
On peut de toute facon commencer sans contraintes de clef et les ajouter plus tard quand on est plus à l'aise.
donc effectivement tout marche bien avec un simple table de liaison !
une question en rab (peut etre aurais je du ouvrir un autre post)
j'ai une table de liaison
IDA IDB
1 - 1
1 - 2
1 - 7
je veux tester en php si une valeure est comprise dans IDB pour un IDA donné
dois je faire un truc du genre
$Valeur_A_tester=3;
$i=0;
$sql="Select `IDB `from table where `idA` = 1";
while ($row=mysql_fetch_array(mysql_query($sql,$this->link), MYSQL_NUM));
{$a[$i]=$row[]; $i++}
if(in_array($Valeur_A_tester,$a) echo "c'est dedans";
Ou y t'il plus elegant?
Ne prenez pas la mauvaise habitude d'appeler vos objets de base de données par des mots du langage SQL (ici la table appelée 'table') !
Pour votre question, il suffit d'ajouter la valeur à tester à la condition WHERE.
Un COUNT(*) donnera directement le nombre de lignes répondant à la condition.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 $valeur_de_A = 1; $valeur_de_B = 3; $requete = " SELECT COUNT(*) FROM laTable WHERE IDA = $valeur_de_A AND IDB = $valeur_de_B "; $reponse = mysql_query($requete); $nb_lignes = mysql_num_rows($reponse); if($nb_lignes > 0) { echo "Valeur IDB = $valeur_de_B trouvée !"; } else { echo "Valeur IDB = $valeur_de_B absente !"; }
Merci,
et si je recommence ce test beaucoup de fois cela ne va t'il pas faire beaucoup d'accès gourmand à la bdd?
corentin
Quel est ton besoin plus précisément ?
Une jointure serait peut-être suffisante.
voilà enfaite j'ai 3 table
une table
client avec deux champs
idclient nomclient
une
facture avec deux champs
idfacture nomfacture
et une
l_client_facture avec deux champs
idclient idfacture
et j'ai besoin de sortir tout les nom de facture d'un client et j'arrive pas à trouver la requete sql qui marche
Select * from client, facture WHERE `Idclient` = 12
mais je pense etre loin du compte.....
$sql = "
Select `client`.`nomclient` ,`facture`.`nomfacture`, from `client`
JOIN `l_client_facture` ON `l_client_facture`.`idclient`=`idfacture`.`id` JOIN `facture` ON `l_client_facture`.`id_facture`=`facture`.`idfactyre`\n"
. " LIMIT 0, 30 ";
c'est correct ca?
La bonne requête serait plutôt celle-ci :
Code:
1
2
3
4 SELECT c.nomclient, f.nomfacture, FROM client AS c INNER JOIN l_client_facture AS l ON l.idclient = c.idclient INNER JOIN facture AS f ON l.idfacture = f.idfacture
Ceci dit, ton modèle de données suppose qu'une facture puisse avoir plusieurs clients.
Normal ?
Donner un nom à une facture, je trouve ça bizarre !
Le schéma classique est plutôt celui-ci :
Facture -1,1----Concerner----0,n- Client
Ce qui donnerait les tables :
Client (idclient, nomclient...)
Facture (idfacture, idclient...)