Групиране на резултати от база данни

AceXe

Registered
Имам следния казус:

Таблица, в която се записват референциите към сайта за всяка публикация. id, refer, publication_id, times, visited - където times е броя на посещемията от един и същи линк, а visited е датата на първо посещение.

Сега в момента имам прост код, който записва всяко посещение, като ако отчете второ посещение от даден линк повдига с една единица times и код, който ми извежда резултатите. Извеждането обаче става сътоветно за всяка референция, което е доста неудобно. Например в един форум има три теми, от които линкват, и с това при извеждането излизат три реда. От фейсбук е голяма мъка, защото тазм през всеки профил добавя накрая ?ref=някакви цифри и с това имам над двеста реда фейсбук.

Това, което ви питам как може да стане е как да се групират извежданията по домейна на сайта. Пример:

facebook.com 250 посещения
forum.bg 130 посещения
data.bg 80 посещения

Ето сегашния код, който извежда линк по линк без групиране.
Код:
<table>
<?php 
$query = mysql_query("SELECT * FROM site_refers WHERE publication_id = '$tut[id]' ORDER BY viewed DESC");
while($ip = mysql_fetch_array($query)) {
$ips = $ip[refer];
$s = explode("//", $ips);
$k = (explode("/", $s[1]));
 ?>
<tr><td style="border: 1px solid #A3A3A3;"><a href="<?= $ip[refer]; ?>"><?= $k[0]; ?></a></td><td style="border: 1px solid #A3A3A3;"><?= $ip[times]; ?></td><td style="border: 1px solid #A3A3A3;"><?php if($ip[viewed]) { echo date("d.m.Y", $ip[viewed]); } ?></td></tr> <?php } ?></table>

Благодаря предварително.
 
SELECT *, SUM(`times`) AS `pose6teniq` FROM site_refers WHERE publication_id = '$tut[id]' ORDER BY viewed DESC GROUP BY `refer`

Така pose6teniq ти е сумата на times за всяка група. Обаче refer трябва да ти е уникално за сайт.
Най-добре ако не ти трябва точния реферер записвай само домейна
 
Там е работата, че ми трябва. Използвам Анализатора на Google, обаче по неясни за мен причини много недомислено, не записва цялото URL, а само до index.php ако е с GET променливи. И тъй като всички форуми са на този принцип и доста блогове, ако имам препратка от тема, за да я намеря по домейна, трябва да се регистрирам, за да използвам търсачката на конкретния форум и става една...

Но, за обща статистика на сайта ми трябва групирането по домейн. Никакъв начин ли няма ?
 
AceXe каза:
Там е работата, че ми трябва. Използвам Анализатора на Google, обаче по неясни за мен причини много недомислено, не записва цялото URL, а само до index.php ако е с GET променливи. И тъй като всички форуми са на този принцип и доста блогове, ако имам препратка от тема, за да я намеря по домейна, трябва да се регистрирам, за да използвам търсачката на конкретния форум и става една...

Но, за обща статистика на сайта ми трябва групирането по домейн. Никакъв начин ли няма ?

Записвай домейна в едно поле, а останалата част в друго.
 
Да, прав си. Това е доста добро решение. Има ли обаче някакъв sql скрипт, с който да ги разделя записите до момента?
 
StormBreaker каза:
SELECT *, SUM(`times`) AS `pose6teniq` FROM site_refers WHERE publication_id = '$tut[id]' ORDER BY viewed DESC GROUP BY `refer`

Така pose6teniq ти е сумата на times за всяка група. Обаче refer трябва да ти е уникално за сайт.
Най-добре ако не ти трябва точния реферер записвай само домейна

Споко, оправих всичко дотук. Разделих ги в две полета. Е едното пълните линкове, а в другото само домейните. Вече и за бъдещи и за настоящите записи е така. Но въпросът е, че това сумиране постоянно ми дава грешка, че заявката не е правилна. Как ли не си играх да разменям местата на някои, да премахвам елементи, но все едно и също. Пък и как ще стане групирането по домейн?
 
Направих го. Малко сложно се получи и може би не толкова оптимално, колкото би могло, но е за моя статистика само, така че няма да създава натоварване.

Направих разделението, за което ми каза. Едно поле за домейна и второ за цялата връзка. Ето ги заявките:

Един път правя заявка, която да изкара всички референции за дадената статия. Втори път правя заявка, която да извади всички референции, в които site = site и включвам GROUP BY site.

Така излизат само домейните. Използвам твоята заявка за сумирането на броя посещения от домейна. След това с един прост javascript за показване и изчезване включвам в него трета заявка, която да изкара всички пълни линкове от дадения домейн. Така финално системата е завършена. Благодаря ти за съдействието. :]
 

Back
Горе