2009-07-22 3 views
0

Voici mes tables de DB:Comment trier les résultats MySQL en fonction d'une valeur étrangère spécifique?

Field 
    - ID, name 
Order 
    - Order ID, name, etc. 
OrderField 
    - Order ID 
    - Field ID 
    - Value 

Par exemple, un nom de champ peut être « Prénom » et la valeur OrderField peut être « James. »

En utilisant une requête MySQL uniquement, comment puis-je trier efficacement Commandes en fonction de OrderFields? Pour être un peu plus précis:

Dites que je veux une liste d'ordres triés par le champ "Prénom", et j'ai déjà son ID de champ. Comment puis-je écrire la requête pour inclure une instruction ORDER BY à trier par le champ "Prénom" OrderField associé à la commande?

Répondre

1

Votre requête doit être quelque chose comme:

SELECT Order.*, OrderField.Value 
    FROM Order 
    LEFT OUTER JOIN OrderField ON Order.`Order ID` = OrderField.`Order ID` 
WHERE OrderField.`Field ID` = :firstNameFieldId 
ORDER BY OrderField.Value 

: firstNameFieldId est l'identifiant du champ "Prénom".
La jointure externe est utilisée dans le cas où vous avez des commandes qui n'ont pas de champ "Prénom" rempli - elles seront toujours récupérées dans ce cas. Si vous êtes sûr que cela n'arrivera jamais (ou que vous ne voulez pas qu'ils soient sélectionnés), remplacez-le par une jointure interne.

+0

Merci ChssPly! –

+0

Grande explication au fait. –

Questions connexes