Помогите плиз написать модуль

#1 6 октября 2016 в 09:54
Привет. Начал изучать php+mysql по необходимости, дошёл до запросов с JOIN-ами, и не могу с ними разобраться.

Короче, суть вопроса (версия инстант 1.10.6):
Пишу модуль, который выводит все рубрики объявлений списком (вложенность не важна) по алфавиту. В module.php пишу
  1. function selectCatBoard($cfg){
  2. $inCore = cmsCore::getInstance();
  3. $inDB = cmsDatabase::getInstance();
  4. $sql = "SELECT * FROM cms_board_cats ORDER BY title ASC";
  5. $result = $inDB->query($sql) ;
  6. if ($inDB->num_rows($result)){
  7. while($item = $inDB->fetch_assoc($result)){
  8. $massiv[] = $item;
  9. }
  10. }
  11. return $massiv;
  12. }
всё работает, нормально выводятся категории.

Теперь надо к каждой категории добавить счётчик, сколько там объявлений. И вот тут я так понимаю, нужен JOIN с cms_board_items, а как правильно его написать — я ни бум-бум. Даже не буду приводить синтаксис того, что я пробовал делать, чтоб не ржали надо мной)))

Просто ткните носом, и желательно поясните на человечьем языке, почему именно так. Заранее спасибо.
#2 6 октября 2016 в 10:18
Поищите примеры в файлах по запросу "content_count"

там и запросы в базу есть и циклы.
#3 6 октября 2016 в 10:24

Поищите примеры

Jestik
я, думаете, не искал? Со вчера мучаюсь) привык сначала разбираться сам, только потом помощи просить. Я ж говорю:

Даже не буду приводить синтаксис того, что я пробовал делать, чтоб не ржали надо мной)))

Тэм
запросы видел, но на примере не получилось сделать. Видимо, пока знаний не хватает. Потому и прошу:

Просто ткните носом, и желательно поясните на человечьем языке, почему именно так

Тэм
#4 6 октября 2016 в 10:34
та я просто сам начинающий, делаем самопис, недавно юзали джойны, но они для меня что то туго даються — долго въезжаю с формированием запроса.

та и БД первой ветки нету, надо устанавливать смотреть
#5 6 октября 2016 в 10:54
Как то так
  1. function selectCatBoard($cfg){
  2. $inCore = cmsCore::getInstance();
  3. $inDB = cmsDatabase::getInstance();
  4. $sql = "SELECT * FROM cms_board_cats ORDER BY title ASC";
  5. $result = $inDB->query($sql) ;
  6. if ($inDB->num_rows($result)){
  7. while($item = $inDB->fetch_assoc($result)){
  8. $count = "SELECT COUNT(*) FROM cms_board_items WHERE category_id = ".$item['id'].""
  9. $massiv[] = $item;
  10. }
  11. }
  12. return $massiv;
  13. }
И тогда в $massiv['count'] должно быть, что вам надо.

Но если хотите с JOIN, то как то так

  1. SELECT cat.*, COUNT(it.category_id) as num_item
  2. FROM cms_board_cats cat
  3. LEFT JOIN cms_board_items it ON it.category_id=cat.id
  4. GROUP BY cat.id
Не проверял, но суть такая.
#6 6 октября 2016 в 14:06
Lora, спасибо, общими усилиями (вы, я и один парень со стаковерфлов))) у меня получилось
  1. select bc.title, bc.id,
  2. count(bi.id) as count
  3. from cms_board_cats bc left join cms_board_items bi
  4. on bc.id = bi.category_id
  5. group by bc.title order by bc.title asc
Тему закрываю! Пошёл учиться дальше.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.