2009-11-23 7 views
0

Est-il possible de faire plusieurs requêtes à la fois dans la même requête?Est-il possible de créer plusieurs requêtes MySQL au sein d'une même table?

Voici un exemple de ce que j'essaie de faire.

Nous avons le tableau suivant:

| userid | price | stock | description | 
---------------------------------------- 
    1  10.00 5  some text 
    2  25.00 2  some text 
    3  15.00 3  some text 
    4  35.00 2  some text 
    5  30.00 4  some text 

Les requêtes que je suis en train de faire sont:

  1. le groupe de prix MIN et MAX par une description
  2. le prix fixé par userid 2
  3. Stock et prix des trois premiers résultats uniquement sans regroupement

Ainsi, le tableau HTML ressemblera à ceci:

description | Min_Price | Max_Price | Price Set by userid 2 | 1st Price | 1st Stock | 2nd Price | 2nd Stock | 3rd Price | 3rd Stock 
+0

Oui - SYNDICATS, vous pouvez également rejoindre à la même table ou une vue en ligne ... –

Répondre

0

Cette solution nécessitera un certain nombre de « sous » requêtes ou jointures.

Vous cherchez probablement à quelque chose comme:

select t1.description, 
     t1.min_price, 
     t1.max_price, 
     t2.user_id_2_price 
from 
    (select description, min(price) as min_price, max(price) as max_price from t group by description) t1 
left join 
    (select price, description as user_id_2_price from t where userid = '2') t2 
on 
    (t1.description = t2.description) 

Et vous pouvez ajouter autant de ces « Jointures gauche » que vous avez besoin

+0

En cours d'exécution de cette requête, je reçois: Colonne inconnue 't2.description' dans 'on clause' –

+0

Désolé ... J'ai oublié de donner un alias à l'ensemble de résultats, a fait le changement dans le code maintenant – Michael

0

Les syndicats de MySQL (http://dev.mysql.com/doc/refman/5.0/en/union.html) vous devriez mettre probablement sur la bonne voie.

Vous pouvez également faire la plupart avec des sous-sélections, bien que ce ne soit probablement pas une bonne idée.

+0

pourquoi avec les sous-sélections ne sera pas une bonne idée? –

0

Utilisez syndicat ou, d'avoir tout en une seule rangée, quelque chose comme ça:

Select 
(Select min(price) from table) as min_price, 
(Select max(price) from table) as max_price, 
.... 
Questions connexes