2010-02-18 4 views

Répondre

0

Utilisez les jointures.

Je supprimé certaines où les conditions pour plus de clarté

SELECT 
    c.id as c_id, 
    c.alias as c_alias, 
    c.title as c_title, 
    sc.id as sc_id, 
    sc.alias as sc_alias, 
    sc.title as sc_title, 
    a.alias as a_alias, 
    a.title as a_title, 
    sa.alias as sa_alias, 
    sa.title as sa_title 
FROM 
    categories c 
LEFT JOIN 
    articles a 
ON 
    c.id = a.category_id 
LEFT JOIN 
    categories sc 
ON 
    c.id = sc.parent_id 
LEFT JOIN 
    articles sa 
ON 
    sc.id = sa.category_id 
ORDER BY 
    c.rank, 
    a.rank, 
    sc.rank, 
    sa.rank 

EDIT: Pour autant que je peux voir, ce n'est pas le cas ici, mais si vous voulez récupérer certains éléments de profondeur illimités, vous voudrez peut-être regarder a way to store strong hierarchical data in a relational database.

+0

J'ai vérifié le lien mais en excluant les enfants à une autre fonction qui fait aussi une requête ne réduit pas les requêtes du tout ^^ – Henry

+0

Il peut ou non, mais la requête donnée le fait. Dans votre cas, comme la profondeur est fixée à un sous-niveau seulement, le bénéfice est seulement de supprimer une jointure. Dans le cas où vous auriez besoin de récupérer une profondeur inconnue, cela pourrait vous aider si vous ne pouvez pas charger tous vos nœuds en même temps. –