2013-03-28 5 views
1

J'ai déjà demandé (et résolu) quelque chose de près here mais maintenant est plus compliqué. J'ai la même table BID:Sélectionnez les données de différentes colonnes et deux tables

Id_auction  bidder_1  winner_1 bidder_2 winner_2 item 
    1    Alice   1   Ben   1   cup 
    2    Charles   0   Alice  1   mug 
    3     Ben   1   Charles  1   pen 

Mais maintenant, je veux joindre l'information avec une autre table USD

Id_auction   USD 
1     100 
2     150 
3     50 

Si un soumissionnaire est un gagnant la valeur est 1 si n'est pas un gagnant la valeur est 0. Ainsi, lors de la première vente aux enchères, Alice et Ben sont gagnants, dans la seconde seulement Alice gagne. Je vais avoir besoin d'une requête MySQL donc les résultats seront comme ceci:

Id_auction  bidder  item  bidder_number USD 
    1    Alice   cup   1   100 
    1    Ben   cup   2   100 
    2    Alice   mug   2   150 
    3    Ben   pen   1   50 
    3    Charles  pen   2   50 

Merci!

+0

normalisent d'abord vos données – Strawberry

+0

Pouvez-vous recréer les tables avec un contenu en mysqlfiddle? – Tschallacka

Répondre

4

Juste JOIN avec ce tableau USD:

SELECT sub.*, USD.USD 
FROM 
(
    SELECT 
    t1.id_auction, 
    t2.bidder_1 AS bidder, 
    t2.item, 
    1 AS bidder_number  
    FROM table1 t1 
    INNER JOIN table1 t2 ON t1.id_auction = t2.id_auction 
         AND t2.winner_1 = 1 
    UNION ALL 
    SELECT 
    t1.id_auction, 
    t2.bidder_2 AS bidder, 
    t2.item, 
    2      
    FROM table1 t1 
    INNER JOIN table1 t2 ON t1.id_auction = t2.id_auction 
         AND t2.winner_2 = 1 
) AS sub 
INNER JOIN USD ON sub.id_auction = USD.id_auction 
ORDER BY id_auction, bidder; 

Updated SQL Fiddle Demo

| ID_AUCTION | BIDDER | ITEM | BIDDER_NUMBER | USD | 
----------------------------------------------------- 
|   1 | Alice | cup |    1 | 100 | 
|   1 |  Ben | cup |    2 | 100 | 
|   2 | Alice | mug |    2 | 150 | 
|   3 |  Ben | pen |    1 | 50 | 
|   3 | Charles | pen |    2 | 50 | 
+0

+1 beaucoup aidant :) –

+1

@MahmoudGamal Maintenant vous avez un fan club :) Merci! –

+0

@MugurUngureanu - De rien à tout moment :). Non, je le connais et il est quelqu'un comme un vieux frère pour moi :) –

1
SELECT 
    BID.Id_auction AS Id_auction, 
    BID.bidder_1 AS bidder, 
    BID.item AS item, 
    USD.USD AS USD, 
    1 AS bidder_number 
FROM BID 
INNER JOIN USD ON BID.Id_auction=USD.Id_auction 
WHERE BID.winner_1=1 

UNION ALL 

SELECT 
    BID.Id_auction AS Id_auction, 
    BID.bidder_2 AS bidder, 
    BID.item AS item, 
    USD.USD AS USD, 
    2 AS bidder_number 
FROM BID 
INNER JOIN USD ON BID.Id_auction=USD.Id_auction 
WHERE BID.winner_2=1 

ORDER BY BID.Id_auction, budder_number 
Questions connexes