Есть две таблиц.
В одной рубрике объявлений: board_cats
со структурой: |cat_id|cat_title|...|
В другой сами объявления: board_items
со структурой |item_id|item_title|...|item_cat_id|
выбираю список рубрик по алфавиту
$sql = "SELECT * FROM board_cats ORDER BY cat_title ASC";
$result = $inDB->query($sql) ;
if ($inDB->num_rows($result)){
while($item = $inDB->fetch_assoc($result)){
$massiv[] = $item;
}
}
всё работает, это просто.
Теперь надо к каждой выведенной рубрике добавить счётчик, сколько там объявлений. А вот тут уже я так понимаю нужны JOIN-ы, в которых я пока ни бум-бум, хотя пытался разобраться на примерах.
То есть, логика такая - в board_items ищем объявления, у которых item_cat_id = cat_id
, считаем их, и сумму пишем в массив. А вот как это сделать?
Заранее спасибо.
Да, всё верно, для этого вам нужно соединение таблиц. Так как не у всех категорий могут быть объявления, рекомендую использовать left join
вместо обычного join
(почитать про типы соединений можете тут и ещё тут):
select bc.cat_title,
count(bi.item_id)
from board_cats bc left join board_items bi
on bc.cat_id = bi.item_cat_id
group by bc.cat_title
Здесь дополнительно идёт группировка по полю bc.cat_title
, чтобы можно было использовать агрегатную функцию count
.
Пример на sqlfiddle.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В таблице хранится строка вида '1,2,10,12,30'Здесь прописываются группы пользователя
Есть запрос выводящий все заказыВ таблице teh_otdel есть 6 отделов, и сейчас они все выводятся
В БД (в 5-ти таблицах одновременно, суммарно примерно 20000 строк) осуществляется живой поиск: