MYSQL SELECT de sous-requêtes dans la clause de JOINTURE

Ok... eh bien, je dois mettre de la sous-requête dans un JOIN clause puisqu'il sélectionne plus d'une colonne et de les mettre dans le SELECT clause ne permet pas qu'il me donne une erreur d'un opérande.
Anywho, c'est ma requête:

SELECT 
    c.id, 
    c.title, 
    c.description, 
    c.icon, 
    p.id as topic_id, 
    p.title AS topic_title, 
    p.date, 
    p.username
FROM forum_cat c
        LEFT JOIN (
            SELECT 
                ft.id, 
                ft.cat_id, 
                ft.title, 
                fp.date, 
                u.username
            FROM forum_topic ft
                JOIN forum_post fp ON fp.topic_id = ft.id
                JOIN user u ON u.user_id = fp.author_id
            WHERE ft.cat_id = c.id
            ORDER BY fp.date DESC
            LIMIT 1
         ) p ON p.cat_id = c.id
WHERE c.main_cat = ?
ORDER BY c.list_no

Maintenant, la chose importante que j'ai besoin ici... FOR EACH catégorie, j'en veux pour preuve le dernier post et le titre de la rubrique dans chaque catégorie.
Toutefois, cette déclaration va à l'INTÉRIEUR d'une boucle foreach boucle autour de la catégories générales qui se trouve ma main_cat.
Donc, il y a 5 catégories principales avec 3 à 8 sous-catégories.. c'est de la sous-catégorie de la requête. MAIS POUR CHAQUE sous-catégorie, j'ai besoin d'attraper le dernier post.. Cependant, il ne fonctionne que cette requête sélection pour chaque catégorie principale, donc il est seulement sélectionner LE DERNIER post entre toutes les sous-catégories combinées... je veux obtenir le dernier message de CHAQUE sous-catégorie, mais je préfère ne pas exécuter cette requête pour chaque sous-catégorie de... depuis je veux le chargement de la page pour être rapide.
MAIS RAPPELEZ-vous, certaines sous-catégories n'AURA PAS le dernier message puisque certains d'entre eux ne peuvent même contenir un sujet encore! Donc la jointure gauche.

Personne ne sait comment faire?

ET BTW, il y a une erreur, il me donne (WHERE ft.cat_id = c.id) dans la sous-requête parce que c.id est un inconnu de la colonne. Mais je suis en train de référence de la requête externe si quelqu'un peut m'aider sur ce problème?

Merci!

Tous les tableaux:

forum_cat (Subcategories)
-----------------------------------------------
ID, Title, Description, Icon, Main_cat, List_no

forum_topic (Topics in each subcategory)
--------------------------------------------
ID, Author_id, Cat_id, Title, Sticky, Locked

forum_post (Posts in each topic)
--------------------------------------------
ID, Topic_id, Author_id, Body, Date, Hidden'

Les principales catégories sont répertoriées dans une fonction. Je n'ai pas les stocker dans la base de données puisque c'était un gaspillage de l'espace, car ils ne changent jamais. Il y a 7 catégories principales, cependant.

  • Cela ressemble beaucoup à un groupwise max requête - le genre que l'on pose dans environ 10 fois par jour. Cela dit, si la navigation récente des questions vraiment ne pas arriver n'importe où, envisager de fournir DDLs pour TOUTES les tables. (Je me doute que vous avez besoin de la foreach)
  • Ok bien je vais modifier ma réponse. J'ai parcouru un peu PARTOUT, mais ma requête est très différente de toutes les autres qui sont affichés en raison de la LIMITE de la sous-requête...
  • Comme les Fraises mentionné dans le but de permettre aux personnes de vous aider à rendre leur vie plus facile la création de SQLFiddle avec appropriée DDL et les données de l'échantillon
  • il n'est pas différent, et à la limite de la clause est faux. Vous pouvez utiliser une solution standard telles que la recherche min(fp.la date) et de se joindre à elle.
  • J'ai TOUT ESSAYÉ pour faire que SQLFiddle de travail.... Je n'ai aucune idée de comment ça marche... j'ai collé tous mes SQL pour créer mes tables sur le côté gauche, cliquez sur créer le Schéma, a couru le fichier SQL sur le côté droit. Et il m'a donné ce message d'erreur: Table 'db_2_6ff8b.l'utilisateur n'existe pas'
  • Utiliser les pastebin et l'un de nous peut le déplacer à un violon.

InformationsquelleAutor Peanut | 2013-01-23