2011-08-27 2 views
2

J'ai 2 tables .. catégories & offres. En fin de compte, je veux faire ce qui suit:Mysql - Sous-requêtes w/comptage des articles

// foreach category 
    // Display category title 
    // show 3 entries in deals where it matches category title above, along with a link saying: "View (count) More Deals 

Maintenant, il y a deux façons pour moi de le faire:

// The "bad" way: 
// foreach category 
    // fetch count of total deals in this category 
    // Display category title (once) 
     // Fetch & Display 3 deals 
    // Display "View (count) more deals 
// This is just quite a few queries for one page 

La voie "autre":

SELECT count(deals.id), 
      category.name as category_name, 
      deal.name as deal_name 
     FROM $db[ddd_deals] as deals 
     JOIN $db[ddd_categories] 
     ON $db[ddd_categories].id = $db[ddd_deals].category_id 
    WHERE deals.city_id = '$_SESSION[city_id]' 
    ORDER BY $db[ddd_categories].name 

Ce qui précède fait tout sauf afficher le nombre de transactions dans chaque catégorie, et seulement afficher 3 offres par catégorie

-S Hould Je choisirons de la table traite (ou de la table catégories, puis saisir les offres?)

// I also tried the following. It returns what category and deal, but the count is off (it is only displaying 1): 

    SELECT count(deals.id) as cc, 
     cat.name as cat_name, 
     deals.name as name 
    FROM ddd_categories as cat 
    JOIN ddd_deals as deals 
     ON deals.category_id=cat.id 
GROUP BY deals.id 
ORDER BY cat.id 

Répondre

0

Juste un rapide, si vous regroupez par deals.id ou .., la commande par est venu à un endroit incorrect.

select cc, cat_name, name from (
    SELECT count(deals.id) as cc, cat.name as cat_name, deals.name as name 
    FROM ddd_categories as cat 
    JOIN ddd_deals as deals on deals.category_id=cat.id 
    GROUP BY deals.id 
) 
ORDER BY xxx; 
+0

Ni l'un ni l'autre ne produit les résultats dont j'ai besoin. Fondamentalement, je veux afficher 3 offres de chaque catégorie sous le titre de la catégorie avec un "voir (compter) plus d'offres dans cette catégorie.) Dois-je le faire la manière intensive de requête? Le code que vous avez posté ci-dessus fait tout sauf me donner le – execv

+0

Si j'utilise "Group By cat.id", j'obtiens le nombre total de transactions dans chaque catégorie (cc), mais il affiche seulement 1 affaire par catégorie .. Toutes les pensées sur une autre direction Je pourrais prendre ça? – execv

0

Vous devez GROUP BY cat.id au lieu de deals.id. Essayez de suivre:

SELECT count(deals.id) as cc, cat.name as cat_name, deals.name as name 
FROM ddd_categories as cat JOIN ddd_deals as deals ON deals.category_id=cat.id 
GROUP BY cat.id