2016-05-20 1 views
-1

Je veux afficher jusqu'à 3 messages de chaque catégorie. Aussi je veux vérifier chaque catégorie ont au moins 3 messages (obtenir le nombre de messages). S'il vous plaît voir la civière de tableau ci-dessousObtenir deux limites différentes de mysql gauche rejoindre

Catégorie Table

+---------+---------------+ 
| cat_id | cat_name  | 
+---------+---------------+ 
|  1 | cat name 1 | 
|  2 | cat name 2 | 
|  3 | cat name 3 | 
+---------+---------------+ 

Messages Table

+------+--------+-------+ 
| p_id | post | c_id | 
+------+--------+-------+ 
| 1 | post 1 | 1 | 
| 2 | post 2 | 1 | 
| 3 | post 3 | 2 | 
| 4 | post 1 | 2 | 
| 5 | post 2 | 1 | 
| 6 | post 3 | 3 | 
| 6 | post 3 | 1 | 
+------+--------+-------+ 

Recherche

if($results=$mysqli->query(SELECT * FROM categories LEFT JOIN posts ON posts.p_id= categories.cat_id WHERE posts.p_id= categories.cat_id ORDER BY cat_id LIMIT 0, 10")){ 
    while($row = mysqli_fecth_array($results)){ 
     //Do stuff 
     } 
    $results ->close(); 
    } 

Tout exemple ou commentaires sont appréciés.

+1

Ne devriez-vous pas joindre l'identifiant de la catégorie dans la table Posts (c_id) avec le cat_id dans la table Category? Voir http://www.w3schools.com/sql/sql_join.asp –

+0

Alors, google "$ results = $ mysqli-> query". Qu'est-ce que chaque résultat retourné a votre code manquant? – Strawberry

+1

Si c'est votre vrai code; vous avez une citation manquante ici 'query (SELECT' - remarquez la syntaxe en surbrillance? et ceci est une grosse faute de frappe' mysqli_fecth_array' –

Répondre

1

Il n'est pas possible d'obtenir jusqu'à 3 messages de chaque catégorie dans MySQL et une requête saine. Vous avez besoin de support pour les fonctions de fenêtre pour cela. Je voudrais préformer une requête distincte pour chaque catégorie. Vous pouvez lire les informations à court dans cette balise: https://stackoverflow.com/tags/window-functions/info

Pour la deuxième partie:

SELECT c_id, COUNT(*) FROM posts GROUP BY c_id; 
0

select distinct (c.postid), c.postname, s.category_name de messages c INNER JOIN catégorie s sur s .cat_id = c.cat_id groupe par c.cat_id ayant COUNT (c.cat_id)> 3 limite 3