2010-12-06 5 views
2

Nous avons 4 tables:avancée Sélectionnez

mysql> desc Products; 
+------------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+------------+-------------+------+-----+---------+----------------+ 
| product_id | int(11)  | NO | PRI | NULL | auto_increment | 
| product | varchar(30) | NO |  | NULL |    | 
+------------+-------------+------+-----+---------+----------------+ 
2 rows in set (0.00 sec) 

mysql> desc Vendors; 
+-----------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-----------+-------------+------+-----+---------+----------------+ 
| vendor_id | int(11)  | NO | PRI | NULL | auto_increment | 
| vendor | varchar(30) | YES |  | NULL |    | 
+-----------+-------------+------+-----+---------+----------------+ 
2 rows in set (0.00 sec) 

mysql> desc Prices; 
+------------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+------------+---------+------+-----+---------+----------------+ 
| price_id | int(11) | NO | PRI | NULL | auto_increment | 
| vendor_id | int(11) | NO | MUL | NULL |    | 
| product_id | int(11) | NO | MUL | NULL |    | 
| price  | double | YES |  | NULL |    | 
+------------+---------+------+-----+---------+----------------+ 
4 rows in set (0.00 sec) 

mysql> desc Bought; 
+------------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+------------+---------+------+-----+---------+----------------+ 
| bought_id | int(11) | NO | PRI | NULL | auto_increment | 
| product_id | int(11) | NO | MUL | NULL |    | 
| date  | date | YES |  | NULL |    | 
| pieces  | int(11) | YES |  | 1  |    | 
+------------+---------+------+-----+---------+----------------+ 
4 rows in set (0.00 sec) 

maintenant nous avons besoin de quelques instructions select complexes, pour obtenir les tableaux dont nous avons besoin:

première table besoin colonnes [fournisseur, produit, prix, vendeurs (qui offre le produit)].

deuxième table doit montrer ce qui a été acheté entre date1 $ et date2 $ [produits, pièces, fournisseur, prix, date]

dernière table devrait montrer ce qui aurait pu sauvé dans le temps donné [fournisseur (le moins cher vendeur pour le produit), produit, pcs, prix (pour un produit), somme (prix pour n produits)].

Comme cela ne serait pas compliqué enaugh, les tables résultantes doivent montrer les noms, au lieu d'une clé. Nous étions assis le jour du trou, mais aucun d'entre nous n'a les connaissances pour effectuer les recherches nécessaires, donc toute aide serait grandement appréciée.

+1

Avez-vous essayé même de briser le problème vers le bas? Par exemple, le besoin d'afficher des noms à la place des ID ne complique pas du tout la solution, car cela signifie que vous avez besoin de JOINs supplémentaires simples, alors rangez les noms. Aussi la description pour au moins le premier ensemble de résultats que vous voulez est vague. Pourquoi a-t-il à la fois «vendeur» et «vendeur»? De même, votre table achetée ne devrait-elle pas référencer le vendeur d'une manière ou d'une autre? En outre, ce n'est peut-être pas une bonne idée d'utiliser des doubles pour les prix. –

+0

Par première, deuxième et dernière "tables", voulez-vous dire des requêtes? – RedFilter

+0

@Matti - "peut-être pas une bonne idée" => "est une idée horrible" – Donnie

Répondre

0

Regardez dans joins pour sélectionner les données à partir de plusieurs tables:

SELECT * FROM Prices LEFT JOIN (Vendors, Products) 
       ON (Products.product_id=Prices.product_id AND Vendors.vendor_id=Prices.vendor_id)