Страница 1 из 1

SELECT с структурированием данных(MySQL)

СообщениеДобавлено: 16 окт 2013, 15:55
guyasyou
Есть такая табличка:
Изображение

Надо сделать такой SELECT, чтобы получить все теги из fvTags как массив. То есть
Код: Выделить всё
array{car; cartoon; Hello Kitty; green}

Ну или в виде строки с разделением запятыми.

Сейчас у меня так
Код: Выделить всё
$allTags = $db->GetOne('SELECT GROUP_CONCAT(fvTags) FROM FileVersions WHERE fvTags != ""');

И я получаю
Код: Выделить всё
string(56) "
Hello Kitty
pink
bag
,
car
cartoon
,
Hello Kitty
green
"


Основная цель: получить все теги файлов и построить облако тегов из них. Может у кого другие решения.
Так как файлов очень много, делать это на уровне PHP будет не хорошо- медленно будет считать, а mysql как то быстрее работает.

Re: SELECT с структурированием данных(MySQL)

СообщениеДобавлено: 16 окт 2013, 16:58
cmsservice
Попробуй вот как-то так

Код: Выделить всё
SELECT GROUP_CONCAT(DISTINCT REPLACE(TRIM(BOTH '\n' FROM fvTags), '\n', ',') ORDER BY fvTags DESC SEPARATOR ',') FROM FileVersions WHERE fvTags != ""

Re: SELECT с структурированием данных(MySQL)

СообщениеДобавлено: 16 окт 2013, 20:44
guyasyou
cmsservice писал(а):Попробуй вот как-то так

Код: Выделить всё
SELECT GROUP_CONCAT(DISTINCT REPLACE(TRIM(BOTH '\n' FROM fvTags), '\n', ',') ORDER BY fvTags DESC SEPARATOR ',') FROM FileVersions WHERE fvTags != ""

Угу, сработало, спасибо!
Поискал еще аналог explode в MySQL, нема. буду делить на пхп. ну думаю там несколько сотен будет, не тысячи таки.

Re: SELECT с структурированием данных(MySQL)

СообщениеДобавлено: 16 окт 2013, 21:39
cmsservice
Да я думаю разделить вообще не большая проблема, тем более, что explode бинарная функция и должна работать быстро.

Re: SELECT с структурированием данных(MySQL)

СообщениеДобавлено: 24 окт 2013, 20:26
guyasyou
Код: Выделить всё
$allTags = $db->GetOne("SELECT GROUP_CONCAT(DISTINCT REPLACE(TRIM(BOTH '\n' FROM fvTags), '\n', ',') ORDER BY fvTags DESC SEPARATOR ',') FROM FileVersions WHERE fvIsApproved = 1 AND fvTags != ''");


Получаю строку с длиной 1024 (чего то там, в дампе пишет) и не более. а должна быть больше. Как решить проблему с ограничением длины строки?

Re: SELECT с структурированием данных(MySQL)

СообщениеДобавлено: 25 окт 2013, 18:52
guyasyou
никто не знает как убрать ограничение получаемой строки от mysql в 1024???

Re: SELECT с структурированием данных(MySQL)

СообщениеДобавлено: 25 окт 2013, 22:07
cmsservice
Я не знаю, мои бойцы посоветовали сделать хранимую процедуру, которая бы делала вьюшку с одним тегом на запись. Боюсь даже представить такую процедуру :)

Re: SELECT с структурированием данных(MySQL)

СообщениеДобавлено: 25 окт 2013, 22:13
guyasyou
Процедуру в mysql? Видел чтото плдобное

Re: SELECT с структурированием данных(MySQL)

СообщениеДобавлено: 25 окт 2013, 22:23
cmsservice
Да, хранимая процедура, в MySQL 5 есть возможность таковые создавать. Гуглить по фразе CREATE PROCEDURE
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку

Re: SELECT с структурированием данных(MySQL)

СообщениеДобавлено: 26 окт 2013, 14:15
Count_Raven
Можно вот так:
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку

Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку

Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку

Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку

Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку


Короче говоря, есть возможность увеличить размер данных только в рамках текущей сессии. Т.е. после закрытия сессии, все вернется на дефолтные настройки. Поэтому нужно будет всегда перед выполнением запроса выполнять изменение параметра. Либо, если есть доступ к настройкам сервера, то можно изменить параметр в конфигурационном файле MySQL. Либо хранимой процедурой.

Re: SELECT с структурированием данных(MySQL)

СообщениеДобавлено: 26 окт 2013, 16:11
guyasyou
короче, получу массив всех тегов и распарсю в php.