Запрос к двум таблицам MySQL

252
26 ноября 2016, 20:17

Есть две таблиц.

В одной рубрике объявлений: 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, считаем их, и сумму пишем в массив. А вот как это сделать?

Заранее спасибо.

Answer 1

Да, всё верно, для этого вам нужно соединение таблиц. Так как не у всех категорий могут быть объявления, рекомендую использовать 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.

READ ALSO
Проверка вхождения числа в строку

Проверка вхождения числа в строку

В таблице хранится строка вида '1,2,10,12,30'Здесь прописываются группы пользователя

258
Помогите отредактировать SQL-запрос

Помогите отредактировать SQL-запрос

Есть запрос выводящий все заказыВ таблице teh_otdel есть 6 отделов, и сейчас они все выводятся

247
Оптимизировать SQL запрос

Оптимизировать SQL запрос

В БД (в 5-ти таблицах одновременно, суммарно примерно 20000 строк) осуществляется живой поиск:

237
Вывести только уникальные значения?

Вывести только уникальные значения?

Всем приветЕсть такой вот массив

233