2016-05-20 3 views
-1

Я хочу отображать до 3 сообщений в каждой категории. Также я хочу проверить, что в каждой категории есть как минимум 3 сообщения (получите количество сообщений). Пожалуйста, смотрите таблицу ниже носилкиПолучите два разных предела от mysql left join

Категория стол

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

Сообщения таблицы

+------+--------+-------+ 
| 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 | 
+------+--------+-------+ 

Запрос

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(); 
    } 

Любой пример или комментарии приветствуются.

+1

Разве вы не присоединяетесь к идентификатору категории в таблице Posts (c_id) с cat_id в таблице Category? См. Http://www.w3schools.com/sql/sql_join.asp –

+0

Итак, google «$ results = $ mysqli-> query». Что возвращает каждый результат, если ваш код отсутствует? – Strawberry

+1

Если это ваш настоящий код; у вас есть цитата отсутствует здесь 'query (SELECT' - подсветка синтаксиса уведомлений? и это большая опечатка' mysqli_fecth_array' –

ответ

1

Невозможно получить до 3 сообщений из каждой категории в MySQL и разумном запросе. Для этого вам нужна поддержка оконных функций. Я бы подготовил отдельный запрос для каждой категории. Вы можете прочитать краткую информацию в этом теге: https://stackoverflow.com/tags/window-functions/info

Для второй части:

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

выбрать отличный (c.postid), c.postname, s.category_name от должностей с внутренними присоединиться к категории с на с .cat_id = c.cat_id с помощью c.cat_id с COUNT (c.cat_id)> 3 limit 3