Tag cloud помощ и съвети

C++ JAVA
Post Reply
User avatar
Hous
Гуру
Гуру
Posts: 2538
Joined: Sat Mar 22, 2008 9:19 pm
Answers: 111
Location: У нас

Tag cloud помощ и съвети

Post by Hous » Fri Jun 14, 2013 4:41 pm

Имам над 1000 записа , като на всеки запис имам по поне 5 тага записани така
id | tag
1 | бла,блаб,бллл,блалалб,тест

Искам да направя tag cloud, като да се показват най-често срещаните тагове (10 примерно или 20) като най-често срещания таг да е примерно със 18 font-size а останалите според това колко често се срещат да се намаля шрифта.

Това което ме спъва е как да разделям преди да преброя таговете , и после как да определям кое най-често се среща като стойност за да го свържа логически с големината на шрифта...
принципно това което ме притеснява е дали пък няма да стане прекалено тежка и безсмислена заявка към mysql при всяко едно зареждане на страницата да се праща заявка за разделяне по , (запетая)
броене,групиране... ?

Някакви идеи ако имате кажете (най-вече от опит).
Благодаря!

User avatar
index
Web-tourist
Web-tourist
Posts: 5396
Joined: Thu Sep 07, 2006 11:08 pm
Answers: 198
Contact:

Post by index » Fri Jun 14, 2013 5:09 pm

В този случай нещата стоят малко сложно. Макар ,че ако беше в базата данни да записваш кой колко пъти се среща можеше да минеш с една заявка.
Но и това не е проблем. Теглиш записите, експлорваш на запетая.
Проверяваш дали стринга не е празен. Ако е празен не го записваш.
Ако не е празен, в един масив записваш примерно

$tags[] = array('word'=>'duma','count'=> '1');
Ако думата я има към count добавяш едно, ако я няма, ами добавяш я с count = 1 ;

След това за да ги сортираш ползваш : Example #3 Sorting database results ОТ http://bg2.php.net/array_multisort
Най-големият брой ще получи шрифт 18 ,а най-малкият примерно 8;
Разликата между двете е 10, за да бъде по-четливо можеш да вземеш като шрифтови размери : 8 ,10,12,14,16,18

Като можеш да пресметнеш процента им на съотношение ида ги подредиш останалите :)

Дано съм ти помогнал :)

User avatar
Hous
Гуру
Гуру
Posts: 2538
Joined: Sat Mar 22, 2008 9:19 pm
Answers: 111
Location: У нас

Post by Hous » Fri Jun 14, 2013 5:36 pm

Тоест идеята ти е с mysql да взимам всички записи да ги пращам към php и с всичките стойности да извършвам сортирането чрез масиви ?

Според теб е по-лекия вариант да сортирам нещата през php, вместо директно в заявката , така ли да разбирам?
пс:Питам защото мисля,че това ще даде проблеми с memory_limit на php скриптовете... (да не говорим за над 100000 записа)

:)

User avatar
index
Web-tourist
Web-tourist
Posts: 5396
Joined: Thu Sep 07, 2006 11:08 pm
Answers: 198
Contact:

Post by index » Fri Jun 14, 2013 6:08 pm

Най-бавното нещо в програмирането след четенето от файлове и връзката с други сървари са циклите, то било for, foreach, while, do/while , recursion.
Идеята ми беше следната :


id | duma | count
Ако думата я няма , вкарва с запис 1
Ако думата я има , добавя count + 1 ;
Като в заявката вземаш тези които са най-много count, тези които са с най-малко и средо аретметично като изключиш най-много и най-малкото.
Так или иначе имаш заявка в базата данни, какво печелиш от този тип :
спестяваш ресурси и 2 цикъла, като единият ще е от 1 000 завъртания ,а другият бог знае колко.

User avatar
Nikol4u
Турист
Турист
Posts: 248
Joined: Thu Apr 12, 2007 5:56 am
Location: Бургас
Contact:

Post by Nikol4u » Fri Jun 14, 2013 9:08 pm

Най-лесно ще стане, ако си нормализираш таблицата. В момента тя покрива само част от 1NF и именно от там ти идват и проблемите.

Сега ще го измислиш и ще е сравнително бързо, но като се съберат още записи и до там..

User avatar
Hous
Гуру
Гуру
Posts: 2538
Joined: Sat Mar 22, 2008 9:19 pm
Answers: 111
Location: У нас

Post by Hous » Sun Jun 16, 2013 8:44 am

Е добре ако трябва да записвам всеки таг за всеки запис на нов ред:
id | item_id | tag
1 | 3 | bla
2 | 3 | blaa
3 | 3 | b;aaaa

Ще е по-лесно за таг cloud, но как да ги записвам?
Защото до сега ползвах елементарното стандартно поле:
input pole
[edintag,vtoritag,tretitag,blabla]

и записвам ^ директно в дб-то...
ако сега искам 50 тага на един елемент какво да правя да пиша в поле разделени със , (запетайки) и после със explode и foreach да правя по примерно 50 inserta вместо 1?

Дайте ощеи идей ако може, благодаря!
:)

User avatar
index
Web-tourist
Web-tourist
Posts: 5396
Joined: Thu Sep 07, 2006 11:08 pm
Answers: 198
Contact:

Post by index » Sun Jun 16, 2013 9:36 am

http://web-tourist.net/login/login/view.php?st=2833
Explorvash и след това implode със част на заявката.
Или си въртиш един цикъл който да ти генерира заявка от типа на :


[sql]INSERT INTO table ( id , product_id , tag )
VALUES ('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma),('' , '1' , ' duma)[/sql]

Post Reply