BG Development


  Reply to this topicStart new topicStart Poll

> Проблем с преброяване и извеждането на резултати
nobi
Публикувано на: 17-08-2019, 18:46
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 7
Регистриран на: 17.08.19



Здравейте. Натъкнах се на следния проблем. Имам база данни в която имам таблица "коментари", както имам и таблица "продукти".
Сяла на коментарите е този
CODE
CREATE TABLE `comments` (
 `id` int(11) NOT NULL,
/* nid е айди-то на новината*/
 `nid` int(11) NOT NULL,
 `c_title` varchar(70) NOT NULL,
 `c_author` varchar(50) NOT NULL,
 `comment` text NOT NULL,
 `dateAdded` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Опитах много начини но никой от тях не сработи както очаквах и исках. Искам да сметне броя на коментарите за всека една новина и да ги покажа. Как да стане това ?
Пробвах с rowCount(); fetch(); fetchAll(); PDO::FETCH_ASSOC; но нищо от тях не сработи изкарва ми числа които не отговарят на броя на коментарите или ми показва броя на всички.
Това е последното което пробвах
CODE
<?php
$query = "SELECT nid, COUNT(comment) FROM comments GROUP BY nid";
$stmt = $db->query($query);
$stmt->execute();
$num= $stmt->rowCount();
echo $num;

//Иначе пробвах и с другите посочени по-горе със същата зявка и с други.
PMEmail Poster
Top
TrustHavic
Публикувано на: 17-08-2019, 20:08
Quote Post



Име: Станимир
Група: Потребител
Ранг: Редовен член

Мнения: 401
Регистриран на: 30.04.14



Използвай само "Select count(*) as `broi` From..."
PMEmail Poster
Top
nobi
Публикувано на: 17-08-2019, 20:28
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 7
Регистриран на: 17.08.19



QUOTE (TrustHavic @ 17-08-2019, 20:08)
Използвай само "Select count(*) as `broi` From..."

Опитах и това но не се получава. В най-добрия случай ми преброява всички.
PMEmail Poster
Top
liolioasd
Публикувано на: 17-08-2019, 22:45
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 48
Регистриран на: 25.12.10



ако всеки ред в таблица comments е коментар към новина:
CODE
SELECT nid, COUNT(1) FROM comments GROUP BY nid


count(comment) - това няма да брои редове, в които comment е null
PMEmail Poster
Top
nobi
Публикувано на: 18-08-2019, 09:17
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 7
Регистриран на: 17.08.19



Оправих се и видях къде съм допуснал грешка.
Грешката ми е в заявката където преброявам нещо си.
Заявката трябва да изглежда по следния начин:
CODE
$query = "SELECT count(comment) AS total FROM comments WHERE nid=".$id."";

Обяснявам евентуално за тези които се натъкнат на този проблем..
count(comment) - преброяваме колко на брой са коментарите от таблицата comments КЪДЕТО nid = $id
//nid при мен е записаното в таблицата айди на новината в която е публикуван коментара а $id е айдито на самата новина.

И така,ако искаме да покажем колко на брой са коментарите за дадена новина , цялата заявка с PDO то трябва да изглежда така:

CODE
$query = "SELECT count(comment) AS total FROM comments WHERE nid = " .$id. "";
$stmt = $db->prepare($query);
$stmt->execute();
$num = $stmt->fetch(PDO::FETCH_ASSOC);
$total = $num['total'];

echo $total;


И така , благодаря на всички за отделеното време и помощта.
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 18-08-2019, 11:18
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2780
Регистриран на: 21.02.18



Такива въпроси трябва да се пускат в SQL раздела, защото иначе рискуваш да не се видят. Аз например почти не че та ПХП под-форума.

В някои бази като PostgreSQL count() е много бавна операция защото прави full table scan и може да се окаже по-производително да си пазиш броя коментари в някоя таблица. За малък сайт, това е е бавно може ида не пречи де icon_smile.gif


--------------------
https://www.rust-lang.org/
---
Хора, които са прекалено умни, за да се занимават с политика, са наказани да бъдат управлявани от глупаци.
---
Life is hard; it's harder when you're stupid.
---
Black metal is like coffee. You have to learn to drink it but when you get used to it, you just want it darker and darker
PMEmail PosterUsers Website
Top
nobi
Публикувано на: 18-08-2019, 18:27
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 7
Регистриран на: 17.08.19



QUOTE (Gamma Goblin @ 18-08-2019, 11:18)
Такива въпроси трябва да се пускат в SQL раздела, защото иначе рискуваш да не се видят. Аз например почти не че та ПХП под-форума.

В някои бази като PostgreSQL count() е много бавна операция защото прави full table scan и може да се окаже по-производително да си пазиш броя коментари в някоя таблица. За малък сайт, това е е бавно може ида не пречи де icon_smile.gif

Какво точно имаш в предвид под "отделна таблица" ? Аз имам таблица "коментари" където се записват коментарите и техните айдита , не е в таблица "новини" примерно.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0