{MySQL} Requetes sur plusieurs tables

Fermé
alesque - 8 déc. 2009 à 18:07
alesque51 Messages postés 14 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 9 décembre 2009 - 9 déc. 2009 à 18:52
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.

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
0
dsl: c'est bien de parler de regroupement, c'est mieux de montrer comment faire !

select age, sum(poids) from eleves where age < 15 group by age

dsl
0
Ceika Messages postés 52 Date d'inscription mercredi 13 décembre 2006 Statut Membre Dernière intervention 15 décembre 2009 13
8 déc. 2009 à 20:04
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 :)
0
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 !)
0
alesque51 Messages postés 14 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 9 décembre 2009
9 déc. 2009 à 15:56
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.
0

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

Posez votre question
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 10
9 déc. 2009 à 16:22
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?
0
alesque51 Messages postés 14 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 9 décembre 2009
9 déc. 2009 à 16:26
je ne comprends pas la question, clé primaire ou étrangères ?

Sinon, les jointures, c'est pas avec le "." ?
0
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 10
9 déc. 2009 à 16:37
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
0
queryz Messages postés 102 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 9 décembre 2010 10
9 déc. 2009 à 16:39
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
0
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"'
0
alesque51 Messages postés 14 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 9 décembre 2009
9 déc. 2009 à 16:44
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
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
9 déc. 2009 à 16:57
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 :
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
0
alesque51 Messages postés 14 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 9 décembre 2009
9 déc. 2009 à 18:52
Merci à tous, je commence un peu à comprendre et j'arrive presque à mes fins !!!

Vous avez raison, faut lire plein de tutos, les recouper, et tester plein de trucs, histoire de comprendre !
0