2010-05-09 5 views
0

je la requête suivante qui retourne 2 tuplesproblème MySQL SELECT statment

SELECT bar_id, bar_name, town_name, bar_telephone, subscription_type_id, pic_type 
FROM towns, subscriptiontype, regions, bar 
LEFT JOIN barpictures bp ON bar.bar_id = bp.bar_id_fk 
WHERE town_id = town_id_fk 
AND bar.test_field = 0 
AND subscription_type_id = subscription_type_id_fk 
AND region_id = region_id_fk 
AND (type like 'logo%' OR type IS NULL) 

La principale différence entre les tuples est que l'on a 'type' = logo et l'autre tuple a 'type' = logo_large. J'ai besoin qu'au lieu d'avoir deux tuples, je dois que j'ai 2 attributs de type, celui qui tient le « logo » et l'autre « logo_large »

par exemple

bar_id, bar_name, town_name, bar_telephone, subscription_type_id, pic_type1, pic_type2 

est-ce possible?

+0

En combinant la syntaxe de jointure ANSI-89 et 92, cette requête ne doit pas passer la vérification de syntaxe ... –

Répondre

1

Oui, il est possible:

SELECT ..., subscription_type_id, 
    MAX(IF(type='logo',type,NULL)) as pic_type1, 
    MAX(IF(type='logo_large',type,NULL)) as pic_type2 
... 
GROUP BY bar_id; 

L'idée est d'utiliser des fonctions de groupement de fusionner les lignes et sélectionnez uniquement la valeur qui correspond à votre condition (pour les lignes qui ne correspondent pas la fonction d'agrégation doit retourner null)