2013-02-20 1 views
0

Comment filtrer la requête avec order by et limit lors de l'utilisation jointure gaucherequête de filtre avec commande par et limite lors de l'utilisation jointure gauche

store_profile 
id + store_name 
1 | Accessorize.me 
2 | Active IT 
3 | Edushop 
4 | Gift2Kids 
5 | Heavyarm 
6 | Bamboo 

store_fee 
id + store_id + date_end 
1 | 1  | 27-6-2013 
2 | 2  | 29-8-2013 
3 | 3  | 02-6-2013 
4 | 4  | 20-4-2013 
5 | 4  | 01-7-2013 
6 | 4  | 28-9-2013 
7 | 5  | 03-9-2013 
8 | 6  | 01-9-2013 

ma précédente requête

$order_by_for_sort_column = "order by $column" //sorting column 

$query = "SELECT * FROM store_profile sp LEFT JOIN store_fee sf ON (sf.store_id = sp.id) $order_by_for_sort_column"; 

ce que je veux est order by id desc et limit 1 pour la table store_fee pas pour toute la requête. Donc, je peux saisir la dernière date dans date_end pour chaque magasin.

Comme vous pouvez le voir pour store_id 4 (store_fee) j'ai 3 date différente et je veux juste saisir la dernière date.

et le résultat devrait être quelque chose comme ça

1 | Accessorize.me 27-6-2013 
2 | Active IT  29-8-2013 
3 | Edushop   02-6-2013 
4 | Gift2Kids  28-9-2013 
5 | Heavyarm  03-9-2013 
6 | Bamboo   01-9-2013 

Répondre

1
SELECT a.id, a.store_name, MAX(b.date_End) date_end 
FROM store_profile a 
     LEFT JOIN store_fee b 
      ON a.ID = b.store_ID 
GROUP BY a.id, a.store_name 

mais si la colonne est varchar date_End type de données, la requête ci-dessus ne fonctionnera pas parce qu'il trie la valeur par caractère et qu'il peut donner par erreur un résultat indésirable. 18-1-2013 est supérieur à 01-6-2013.

Pour gagner encore plus de connaissances sur les jointures, veuillez visiter le lien ci-dessous:

+0

le type de données est "date" – rusly

+0

@rusly alors la requête fonctionne très bien ': D' –

+0

Vous supposez que 'store_profile.store_name' est unique et l'utilise comme une clé. Cela peut être une mauvaise hypothèse et l'utilisation de champs métier comme clés, même lorsqu'elles sont uniques, est de toute façon une mauvaise pratique. –

1
SELECT * 
FROM store_profile AS sp 
    LEFT JOIN (
    SELECT store_id, MAX(date_end) 
    FROM store_fee 
    GROUP BY store_id 
) AS sf 
    ON sp.id=sf.store_id; 
Questions connexes