{MySQL} Requetes sur plusieurs tables
alesque
-
alesque51 Messages postés 14 Statut Membre -
alesque51 Messages postés 14 Statut Membre -
Bonjour,
Je parcours depuis pas mal de temps des tutos sur le comment ça marche le sql, et j'arrive à apprendre pas mal de choses, et aussi à faire le plus simple. (j'ai mis du temps a comprendre comment me connecter à la base alors, vous imaginez le reste...).
Aujourd'hui, je tente de faire une feuille qui fait appel à plusieurs tables, mais cela me pose problème.
Je pense que mon plus gros souci est la syntaxe utilisée, sur les tuto, on a les commandes, mais je trouve pas les syntaxes exactes...
Pour le moment (et vous imaginez que ça ne fonctionne pas, j'en suis là :
[quote]<?php
$sql = 'SELECT products_model, products_description FROM products_description, products SUM(manufacturers.manufacturers_id) WHERE manufacturers_id = "25"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
echo ''.$data[products_description.product_description];
mysql_free_result ($req);
mysql_close ();
?>
/quote
Je ne sais pas comment utiliser le SUM ni à quoi il sert, une bonne âme charitable pourrait peut être m'aiguiller pour corriger ma copie ?
D'avance merci,
Alesque.
Je parcours depuis pas mal de temps des tutos sur le comment ça marche le sql, et j'arrive à apprendre pas mal de choses, et aussi à faire le plus simple. (j'ai mis du temps a comprendre comment me connecter à la base alors, vous imaginez le reste...).
Aujourd'hui, je tente de faire une feuille qui fait appel à plusieurs tables, mais cela me pose problème.
Je pense que mon plus gros souci est la syntaxe utilisée, sur les tuto, on a les commandes, mais je trouve pas les syntaxes exactes...
Pour le moment (et vous imaginez que ça ne fonctionne pas, j'en suis là :
[quote]<?php
$sql = 'SELECT products_model, products_description FROM products_description, products SUM(manufacturers.manufacturers_id) WHERE manufacturers_id = "25"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
echo ''.$data[products_description.product_description];
mysql_free_result ($req);
mysql_close ();
?>
/quote
Je ne sais pas comment utiliser le SUM ni à quoi il sert, une bonne âme charitable pourrait peut être m'aiguiller pour corriger ma copie ?
D'avance merci,
Alesque.
A voir également:
- {MySQL} Requetes sur plusieurs tables
- Tables des matières word - Guide
- Mysql community server - Télécharger - Bases de données
- Tables ascii - Guide
- Comment faire une table des annexes sur word ✓ - Forum Word
- Mysql a répondu : documentation connexion impossible : paramètres incorrects. - Forum Bases de données
12 réponses
Salut
le sum sert à sommer des valeurs. il est à placer où tu veux dans le select
exemple:
select sum(poids) from eleves where age < 15;
ainsi, il t'est renvoyé le poids total des eleves de moins de 15 ans
maintenant, si tu veux un total par tranche d'age, il faut effectuer un regroupement
select age, sum(poids) from eleves where age < 15,
exemple de ce que tu pourrais obtenir
Age sum(poids)
10 232
11 175
12 196
13 201
14 280
À toi de tester maintenant
le sum sert à sommer des valeurs. il est à placer où tu veux dans le select
exemple:
select sum(poids) from eleves where age < 15;
ainsi, il t'est renvoyé le poids total des eleves de moins de 15 ans
maintenant, si tu veux un total par tranche d'age, il faut effectuer un regroupement
select age, sum(poids) from eleves where age < 15,
exemple de ce que tu pourrais obtenir
Age sum(poids)
10 232
11 175
12 196
13 201
14 280
À toi de tester maintenant
Le sum() est une fonction qui sert à faire la somme du champs sélectionné.
Par exemple en français :
Tu recherches le chiffres d'affaires total sur la vente du produit qui est un modèle de téléphone disons : iphone
tu feras donc :
select sum(ca) from, produits where produits = "iphone" + jointure
Et tu auras le CA total qu'a généré la vente de l'iphone.
Voila pour la fonction sum :)
Par exemple en français :
Tu recherches le chiffres d'affaires total sur la vente du produit qui est un modèle de téléphone disons : iphone
tu feras donc :
select sum(ca) from, produits where produits = "iphone" + jointure
Et tu auras le CA total qu'a généré la vente de l'iphone.
Voila pour la fonction sum :)
Merci pour ces réponses, ce n'est donc pas la fonction que je cherche pour le moment, je cherche juste à afficher des données provenant de plusieurs tables.
Ex :
J'ai une table "manufacturers" dans laquelle j'ai tout mes manufacturers_id
dans la table products, je voudrais sélectionner tous les produits ( d'un fabricant (ID 25 par exemple) ainsi que le stock (products_quantity)
et ajouter products_description qui se trouve dans la table produits_description
Je sais pas si j'arrive bien à expliquer..., en gros je cherche la bonne syntaxe pour afficher (sans mise en forme) :
Un fabricant (manufacturers_id)
La liste de ses produits - leurs descriptifs - la quantité
Merci pour votre aide
(j'ai déjà eu besoin d'aide dans d'autres domaines et votre forum est vraiment formidable !)
Ex :
J'ai une table "manufacturers" dans laquelle j'ai tout mes manufacturers_id
dans la table products, je voudrais sélectionner tous les produits ( d'un fabricant (ID 25 par exemple) ainsi que le stock (products_quantity)
et ajouter products_description qui se trouve dans la table produits_description
Je sais pas si j'arrive bien à expliquer..., en gros je cherche la bonne syntaxe pour afficher (sans mise en forme) :
Un fabricant (manufacturers_id)
La liste de ses produits - leurs descriptifs - la quantité
Merci pour votre aide
(j'ai déjà eu besoin d'aide dans d'autres domaines et votre forum est vraiment formidable !)
En fait, voilà ce que j'essaye de faire, je sais, ça doit être du grand n'importe quoi, mais c'est pour ça que j'ai besoin de vos lumières...
[quote]<?php
$sql = 'SELECT products_description.products_name, products.products_quantity, products_description.products_description, manufacturers.manufacturers_id FROM manufacturers, products_description, products WHERE manufacturers.manufacturers_id = "25"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
echo ''.$data['products_descrpition.products_name, products_description.product_description, products_products_quantity'];
mysql_free_result ($req);
mysql_close ();
?>
[/quote]
Bien sur, j'ai une erreur (Warning: mysql_query()) qui s'affiche au lieu du résultat tant attendu, mais je suppose que vous n'avez même pas besoin de tester pour voir que ça ne fonctionne pas.
[quote]<?php
$sql = 'SELECT products_description.products_name, products.products_quantity, products_description.products_description, manufacturers.manufacturers_id FROM manufacturers, products_description, products WHERE manufacturers.manufacturers_id = "25"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
echo ''.$data['products_descrpition.products_name, products_description.product_description, products_products_quantity'];
mysql_free_result ($req);
mysql_close ();
?>
[/quote]
Bien sur, j'ai une erreur (Warning: mysql_query()) qui s'affiche au lieu du résultat tant attendu, mais je suppose que vous n'avez même pas besoin de tester pour voir que ça ne fonctionne pas.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Il faut que tu fais des jointures !
Quels sont les clés primaire et clé etrangéres qu'il y a dans les tables utilisés?
Quels sont les clés primaire et clé etrangéres qu'il y a dans les tables utilisés?
je ne comprends pas la question, clé primaire ou étrangères ?
Sinon, les jointures, c'est pas avec le "." ?
Sinon, les jointures, c'est pas avec le "." ?
Exemple de clé primaire : ETABLISSEMENT_ID
CLE PRIMAIRE DE CETTE TABLE :
ÉTABLISSEMENT_ ID | NOM_ETABLISSEMENT
------------------------------------------------------
1234 TOTO
1235 TITI
ICI ETABLISSEMENT_ID est une clé étrangère car il est relié a une clé primaire :
PRODUIT |ETABLISSEMENT_ID
------------------------------------
PAIN 1234
LAIT 1235
CLE PRIMAIRE DE CETTE TABLE :
ÉTABLISSEMENT_ ID | NOM_ETABLISSEMENT
------------------------------------------------------
1234 TOTO
1235 TITI
ICI ETABLISSEMENT_ID est une clé étrangère car il est relié a une clé primaire :
PRODUIT |ETABLISSEMENT_ID
------------------------------------
PAIN 1234
LAIT 1235
Un conseil : Lis les tutos jusque à ce que tu comprennent le principe clé primaire et clé étrangére car tu n'arriveras jamais à faire de requete si tu ne connais pas ça
En fait il faut que tu signales à quelle table appartiennent les données.
De ce que je comprend tu as 3 tables : products, products_descriptions et manufacturers.
SELECT P.products_model, PD.products_description FROM products_description AS PD, products AS P, manufacturers AS M SUM (M.manufacturers_id) WHERE M.manufacturers_id = "25"'
De tête ça devrait faire un truc du genre. Mais si je dis pas de bétîses ta requête n'est quand même pas bonne. Quand tu travailles sur plusieurs tables il faut faire des jointures entres elles pour pouvoir se ballader librement dans celles que tu veux. En gros, si je vais dire que dans la tables manufacturers tu as products_id et products_description_id (c'est pour l'exemple hein, juste pour te montrer que les tables ont un point commun).
Donc ta requête deviendrai du coup :
SELECT P.products_model, PD.products_description
FROM manufacturers AS M
JOIN products AS P ON M.products_id=P.products_id
JOIN products_description AS PD ON M.products_descriptions_id=PD.products_descriptions_id
SUM (M.manufacturers_id)
WHERE M.manufacturers_id = "25"'
De ce que je comprend tu as 3 tables : products, products_descriptions et manufacturers.
SELECT P.products_model, PD.products_description FROM products_description AS PD, products AS P, manufacturers AS M SUM (M.manufacturers_id) WHERE M.manufacturers_id = "25"'
De tête ça devrait faire un truc du genre. Mais si je dis pas de bétîses ta requête n'est quand même pas bonne. Quand tu travailles sur plusieurs tables il faut faire des jointures entres elles pour pouvoir se ballader librement dans celles que tu veux. En gros, si je vais dire que dans la tables manufacturers tu as products_id et products_description_id (c'est pour l'exemple hein, juste pour te montrer que les tables ont un point commun).
Donc ta requête deviendrai du coup :
SELECT P.products_model, PD.products_description
FROM manufacturers AS M
JOIN products AS P ON M.products_id=P.products_id
JOIN products_description AS PD ON M.products_descriptions_id=PD.products_descriptions_id
SUM (M.manufacturers_id)
WHERE M.manufacturers_id = "25"'
Ok, alors,
manufacturers_id est la clé primaire de la table manufacturers
manufacturers_id est une clé étrangère dans la table products
Dans la table products, la clé primaire est products_id
et dans products_description, c'est aussi products_id
manufacturers_id est la clé primaire de la table manufacturers
manufacturers_id est une clé étrangère dans la table products
Dans la table products, la clé primaire est products_id
et dans products_description, c'est aussi products_id
Bonjour,
Pour les jointures, il est plus propre d'utiliser le mot clé JOIN. Et plus simple d'utiliser des alias pour les noms de tables, mais ceci est optionnel.
Cela donne quelque chose comme ça :
Et si tu supprimes la clause WHERE, tu obtiens tous les produits de tous les manufacturiers.
À la place de m.manufacturers_id, dans la clause SELECT, tu dois aussi pouvoir mettre le nom si tu as ça en base.
Xavier
Pour les jointures, il est plus propre d'utiliser le mot clé JOIN. Et plus simple d'utiliser des alias pour les noms de tables, mais ceci est optionnel.
Cela donne quelque chose comme ça :
SELECT pd.products_name, p.products_quantity, pd.products_description, m.manufacturers_id FROM manufacturers m INNER JOIN products p ON p.manufacturers_id = m.manufacturers_id INNER JOIN products_description pd ON p.products_id = pd.products_id WHERE manufacturers.manufacturers_id = '25'
Et si tu supprimes la clause WHERE, tu obtiens tous les produits de tous les manufacturiers.
À la place de m.manufacturers_id, dans la clause SELECT, tu dois aussi pouvoir mettre le nom si tu as ça en base.
Xavier
select age, sum(poids) from eleves where age < 15 group by age
dsl