quelle formule SQL pour cette table ?

letcheuv
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 18:00

Bonjour a tous!

Je sais pas si vous pourrez faire ce que je vous demende mais bon je le fait quand même.

Voila avec une requete SQL jaimerais avoir un tableau avec le nom du magasin, le numero du magasin, et le montant de ce qu'ils ont commandé.
Sur cette fenetre il ne s'affichera que les client qui ont commendé pour plus de 1500 €.

Voila mes tables:
http://www.hiboox.com/lang-fr/image....g=lb6esvhg.jpg


Quel doit etre ma requette?

Jespere avoir était clair...

Merci a ceux qui m'aideront!

Eléphant du PHP | 422 Messages

08 mai 2008, 18:47

1) Ton image n'est pas visible. Merci de vérifier le lien.
2) Quel est le début de requête que tu as commencé à écrire ?

Petit nouveau ! | 1 Messages

08 mai 2008, 18:47

Le lien redirige vers la page d'accueil du site hiboox... donc difficile de repondre a la question

letcheuv
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 18:51

J'ai pour l'instant écris aucun début de requette....

Ce lien doit fonctionner:
http://images0.hiboox.com/images/1908/lb6esvhg.jpg

letcheuv
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 19:05

SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin, Factures
WHERE magasin.num_magasin=factures.num-magasin And montant_facture>=1500;

Sa marche pas...

Eléphant du PHP | 422 Messages

08 mai 2008, 19:30

num-magasin
Et avec num_magasin au lieu de num-magasin ?

Eléphant du PHP | 174 Messages

08 mai 2008, 19:34

Bonsoir.

Ce qui ne fonctionne pas c'est ça :
SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin, Factures
WHERE magasin.num_magasin=factures.num-magasin And montant_facture>=1500;
SQL est sensible à la casse.

Le plus simple, dans la mesure où dans les deux tables le champs commun est num_magasin, est d'opter pour un NATURAL JOIN :

SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin NATURAL JOIN Factures
WHERE montant_facture>=1500;

Sinon vous pouvez optez pour :

SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin, Factures
WHERE Magasin.num_magasin=Factures.num_magasin and montant_facture>=1500;

En espérant vous avoir dépanné.

Julie.
"Il vaut mieux avoir du luxe dans ses sentiments que sur ses habits, je ne crains, moi, le mépris de personne" Honoré De Balzac.
"On s'étonne trop de ce que l'on voit rarement et trop peu de ce que l'on voit chaque jour" Mme de Genlis
"L'absence diminue les médiocres passions et augmente les grandes comme le vent éteint les bougies et allume le feu" La RocheFoucauld
"People have hope because they can't see Death standing behind them" (anonymous)
"Of all the things I've lost, I miss my brain the most" (from a fanfic)

Invité
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 19:34

Le champs spécifié 'num_magasin" peut désigner plusieurs tables listé dans le clause FROM de votre instruction SQL....

Invité
Invité n'ayant pas de compte PHPfrance

08 mai 2008, 19:38

Désolé Animitha j'ai essayer avec votre requette et sa ne fonctionne toujours pas...

Sa me demende d'entré des valeurs alors que je voudrais un tableau qui affiche le num_magasin, nom_magasin, et le montant des achats des magasins ayant acheté pour plus de 1500 €

Eléphant du PHP | 174 Messages

08 mai 2008, 21:04

Cela vous demande d'entrer des valeurs ? pourriez-vous être plus précis (imprim écran ou copier/coller de l'erreur obtenue)
"Il vaut mieux avoir du luxe dans ses sentiments que sur ses habits, je ne crains, moi, le mépris de personne" Honoré De Balzac.
"On s'étonne trop de ce que l'on voit rarement et trop peu de ce que l'on voit chaque jour" Mme de Genlis
"L'absence diminue les médiocres passions et augmente les grandes comme le vent éteint les bougies et allume le feu" La RocheFoucauld
"People have hope because they can't see Death standing behind them" (anonymous)
"Of all the things I've lost, I miss my brain the most" (from a fanfic)

Eléphant du PHP | 422 Messages

08 mai 2008, 23:36

SQL est sensible à la casse.
Ce n'est pas vrai.
SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin, Factures
WHERE Magasin.num_magasin=Factures.num_magasin and montant_facture>=1500;
1) Quoique tu fasses, quand tu écris num-magasin, ce n'est pas num_magasin.
2) Quand on fait une jointure, on préfixe les noms des champs par le nom de la table. Surtout quand il y a ambiguité pour un champ qui porte le même nom dans deux tables.

Code : Tout sélectionner

SELECT Magasin.nom_magasin, Magasin.num_magasin, Factures.montant_facture FROM Magasin, Factures WHERE Magasin.num_magasin=Factures.num_magasin and Factures.montant_facture>=1500;
Dernière remarque : cela ne change rien à la syntaxe, mais pourquoi la table magasin porte t'elle un nom au singulier et la table Factures un nom au pluriel ?

letcheuv
Invité n'ayant pas de compte PHPfrance

09 mai 2008, 11:30

Jsais pas parce que j'ai mis Factures au pluriel.

Voila l'imprim écran:

http://www.hiboox.com/lang-fr/image.php ... 5x8z2e.jpg

Eléphant du PHP | 174 Messages

09 mai 2008, 13:14

Il demande la valeur du paramètre num, dans ce cas peut être comprend-il qu'il s'agit d'une opération (num - magasin et non pas 'num-magasin').
Dans ce cas je vous conseille d'utiliser l'écriture plus spécifique de SQL qui consiste à encadrer le nom des champs avec des ` (touches Alt Gr + 7).

Caroube => quand je disais sensible à la casse j'entendais qu'il ne comprendrait pas que "Magasin" et "magasin" sont une seule et même table (à moins que la dernière version de SQL le prenne en charge, ça je ne peux pas le dire je n'y suis pas encore passée).

Concernant le fait que num_magasin soit un champs ambigu, ici il n'y a pas d'ambiguité, c'est bien une valeur commune à deux tables, d'où la possibilité d'un NATURAL JOIN.
Maintenant il est effectivement plus logique d'écrire table1.champs = table2.champs pour éviter les pannes si on change le nom de la colonne dans la base de données, ça j'en conviens volontier.
"Il vaut mieux avoir du luxe dans ses sentiments que sur ses habits, je ne crains, moi, le mépris de personne" Honoré De Balzac.
"On s'étonne trop de ce que l'on voit rarement et trop peu de ce que l'on voit chaque jour" Mme de Genlis
"L'absence diminue les médiocres passions et augmente les grandes comme le vent éteint les bougies et allume le feu" La RocheFoucauld
"People have hope because they can't see Death standing behind them" (anonymous)
"Of all the things I've lost, I miss my brain the most" (from a fanfic)

Eléphant du PHP | 53 Messages

09 mai 2008, 14:35

Je conseil cette piste avec des alias :

Code : Tout sélectionner

SELECT mag.nom_magasin, mag.num_magasin, fac.montant_facture FROM Magasin mag, Factures fac WHERE mag.num_magasin = fac.num_magasin AND fac.montant_facture>=1500;
Sinon mysql met normalement des messages d'erreur.
Cela évite de se tromper dans les noms de champs.

Cordialement,

Eléphant du PHP | 422 Messages

09 mai 2008, 18:34

Caroube => quand je disais sensible à la casse j'entendais qu'il ne comprendrait pas que "Magasin" et "magasin" sont une seule et même table (à moins que la dernière version de SQL le prenne en charge, ça je ne peux pas le dire je n'y suis pas encore passée).
Je confirme : on ne peut pas dire que SQL est sensible à la casse ou pas.

Si tu prends des bases de données telle que Oracle, MySQL, SQLite, Access, SQLAnywhere, ... tu peux écrire "Magasin" ou "magasin". Par contre, les produits "Microsoft SQL Server" ou "Sybase SQL Server" sont sensibles à la casse (du moins dans le paramétrage par défaut).

Et je vais le dire une dernière fois avant de laisser tomber. Qu'est-ce que ça te dit si tu mets "num_magasin" au lieu de "num-magasin" dans ta requête ? Parce que là, on tourne en rond autour d'une erreur de frappe !!!
Dans ce cas je vous conseille d'utiliser l'écriture plus spécifique de SQL qui consiste à encadrer le nom des champs avec des ` (touches Alt Gr + 7).
Au risque de passer pour un emm..., je dis non, ce n'est pas une bonne idée. Cette apostrophe ` est un pis-aller dans les cas où l'on est obligé d'avoir des noms de champs qui comportent des espaces, des accents, des mots réservés, ...
1) On est quasiment jamais obligé.
2) Ce n'est pas une syntaxe SQL standard. De nombreuses bases de données ne supportent pas ce caractère.
3) Dans ce cas, le champ dans la base s'appelle num_magasin et pas num-magasin !
Concernant le fait que num_magasin soit un champs ambigu, ici il n'y a pas d'ambiguité, c'est bien une valeur commune à deux tables, d'où la possibilité d'un NATURAL JOIN.
je ne parle pas du natural join (syntaxe haïssable à mon avis), mais de l'ambiguité de ce qu'il y a entre le select et le from. Si vous avez deux tables avec un même nom de champ, vous ne pouvez pas faire la requête sans préfixer (imaginez que les identifiants de Produit et de magasin s'appellent id)