0 Пользователей и 1 Гость просматривают эту тему.
  • 18 Ответов
  • 2048 Просмотров
*

Aeliot

  • Захожу иногда
  • 107
  • 2 / 0
Многие данные в Joomla хранятся в базе данных  JSON-формате
в частности многочисленные параметры
подскажите, пожалуйста, как можно использовать их с sql запросе
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
никак, только заранее разбирать в PHP и передавать в запрос обычным образом
сравнить строку в json никак не выйдет в мускуле
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Aeliot

  • Захожу иногда
  • 107
  • 2 / 0
никак, только заранее разбирать в PHP и передавать в запрос обычным образом
сравнить строку в json никак не выйдет в мускуле
Оказалось очень даже решаемо.

Код
SELECT substr(substring_index(substr(params,locate('"timezone":"',params)),'"',4),13) as txt FROM `lby52_users` WHERE 1

нашел здесь: http://hashcode.ru/questions/28377/%D0%BA%D0%B0%D0%BA-%D1%81%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81-%D0%BA-mysql-%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%8E%D1%89%D0%B8%D0%B9-json-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Aeliot понятно, что решаемо, к примеру можно и like использовать зная поле. Вот вопрос быстродействия. Насколько такой запрос выполняется быстро. И beliyadm вам правильно ответил. Вы должны понимать из какого количества данных вы собираетесь выбрать. Порою проще выбрать все строки а потом в php их обрабатывать. Да ив приведенной вам ссылке прямо написано, что это извращение
*

Aeliot

  • Захожу иногда
  • 107
  • 2 / 0
Fedor Vlasenko,
вы хотите сказать, что циклом foreach в php (а порой несколькими циклами для достижения того же результата) обойти то же количество записей будет быстрее?

На сколько я сравнивал у меня в базе обработка проходила всегда быстрее, чем в php. И чем больше выборка, тем разница всегда больше.

По поводу "изврата" абсолютно согласен,
но это, видимо, лучше чем лезть в ядро и менять структуру хранения данных базовых компонентов Joomla.
« Последнее редактирование: 10.06.2013, 21:37:37 от Aeliot »
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Давайте говорить конкретно. Записей то сколько?
И не забываем что MySQL не  единственный способ хранения данных. Середнячок так сказать? Потому имеет наибольшую популярность, удобен и покрывает на 98% потребностей. Вы бы лучше описали вашу задачу, чего хотите получить и, что имеете в данных
*

Aeliot

  • Захожу иногда
  • 107
  • 2 / 0
Да регулярно приходится доставать из базы то одни, то другие данные.

На данный момент разбираюсь с временными зонами.
Временная зона пользователя, как это очень часто бывает в Joomla, хранится в json формате в одном поле с другими параметрами.
Задал вопрос по работе с временными зонами здесь: Как в Joomla реализована работа с TimeZone и как это использовать в своем расширении?
Но пока жду ответа пытаюсь решить вопрос в прямую.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
В таком случае вам нужно:
1. Написать запрос и обработать данные в php записав в свою таблицу
2. Написать свой плагин  на событие http://docs.joomla.org/Plugin/Events/User#onUserAfterSave где вы будете писать данные временной зоны в свою таблицу, и с ней уже работать
*

Aeliot

  • Захожу иногда
  • 107
  • 2 / 0
Немного не в тему, но может дадите ссылку на то, как создавать подобные плагины?
*

SDKiller

  • Живу я здесь
  • 2706
  • 329 / 5
  • ...ergo sum
Вообще зависит от задачи - вам что, надо массово обрабатывать временные зоны юзеров?
Если надо для отдельного пользователя - почему не вытаскивать его средствами JFactory

А что касается оценки быстродействия - сгенерировать таблицу на 10000 юзеров, написать в двух вариантах и сравнить по времени.

Только не забывать про кеширование sql-запросов, если локально тренируетесь - для чистоты эксперимента перезапустить сервер.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
*

varX

  • Живу я здесь
  • 2450
  • 141 / 5
  • разработка компонентов
А не проще обьект $user = JUser::getInstance( $id ); использовать? Для текущего юзера вообще запрос не понадобится делать.
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
А не проще объект $user = JUser::getInstance( $id ); использовать? Для текущего юзера вообще запрос не понадобится делать.
Ну вот самый простой пример, захотел я вывести всех пользователей одной временной зоны? Для одного пользователя уже спрашивали
Цитировать
Записей то сколько?
*

Aeliot

  • Захожу иногда
  • 107
  • 2 / 0
Записей то сколько?
Нужно обработать порядка 100-200 записей, в которых около десятка долей с датой. т.е. нужно одним махом преобразовать порядка 1000-5000 дат.
И это практически в начале жизни базы. Через полгода - год цифры будут гораздо больше.
Если делать всё это в php, то получится такая куча вызовов, что сервер может не дождаться окончания обработки скрипта и свалится с ошибкой таймаута.

И не забываем что MySQL не  единственный способ хранения данных. Середнячок так сказать? Потому имеет наибольшую популярность, удобен и покрывает на 98% потребностей.
Да и мои потребности ещё как минимум год будет полностью покрывать

Вы бы лучше описали вашу задачу, чего хотите получить и, что имеете в данных
Даже не знаю как описать, чтобы коротко и понятно.
Если по простому, то в таблице ведется учет работы с заказами. Даты должны вводиться "в естественной форме", т.е. если происходит какое-то событие, скажем в 9:35, то пользователь вносит его именно в таком виде. Скрипт при сохранении преобразует его в локальное время сервера. При отображении этого поля происходит обратное преобразование, чтобы пользователь видел именно то, что вносил.
Думал преобразовывать время в GMT, но, как понимаю, тогда получу некорректный результат, если сравнивать эту дату-время с полем, в которое данные были внесены с помощью функции NOW(). Впрочем, если NOW() обернуть в DATE_ADD() или что-то подобное, то можно хранить дату и в GMT.

Но это мелочи. Пару полей можно и в php конвертнуть.
Что делать, когда в "удобочитаемый вид" нужно преобразовать несколько тысяч полей. Т.е. чтобы пользователь мог посмотреть сводную табличку "состояние дел" и чтобы все даты были преобразованы в его локаль.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Создать отдельную таблицу(таблицы), под свои задачи. Не стоит все в таблицу пользователей складывать. Не для этого она предназначена
*

Aeliot

  • Захожу иногда
  • 107
  • 2 / 0
Чем дальше копаюсь, тем больше понимаю что сам могу реализовать, но, по-хорошему, нужен бы программист.

Fedor Vlasenko, SDKiller
Может кому-то из вас было бы интересно взяться за сопровождение сайта
Вот проект на фрилансере: http://freelance.ru/projects/247941/
Если будет интересно, подробности сброшу в личку.
« Последнее редактирование: 11.06.2013, 11:52:29 от Aeliot »
*

SDKiller

  • Живу я здесь
  • 2706
  • 329 / 5
  • ...ergo sum
Нет, я не лесоруб )



Да и аккаунты на всех существующих фрилансах не держу.
*

Aeliot

  • Захожу иногда
  • 107
  • 2 / 0
упс. исправил. Вечно забываю одну галку снять при создании проекта.

SDKiller, за ответ спасибо. Появится интерес -- пишите.
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Aeliot - если вам заранее известна строка - то можно и так, можно и like
Но первое что приходит в голову - работать с массивом json напрямую в MySQL (наиболее оптимальный вариант как кажется) - вот он невозможен
Увы, даже на хабре я понял, что это низзя http://habrahabr.ru/qa/37897/#answer_145755
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как удалить ненужные поля при регистрации?

Автор petya242

Ответов: 2
Просмотров: 3599
Последний ответ 09.11.2017, 12:58:09
от abonnent
Подключения типа logo= $this->params->get

Автор intmaster

Ответов: 3
Просмотров: 5689
Последний ответ 18.02.2017, 18:08:54
от tiraz
Динамические дополнительные поля в материале

Автор goga_pgasovav

Ответов: 2
Просмотров: 1027
Последний ответ 19.05.2016, 22:52:43
от goga_pgasovav
Как к Категории вывести дополнительные поля?

Автор biosila9991

Ответов: 0
Просмотров: 882
Последний ответ 01.04.2016, 16:59:26
от biosila9991
Вывод данных из дополнительного поля в модуле «html-код»

Автор goga_pgasovav

Ответов: 4
Просмотров: 1204
Последний ответ 17.03.2016, 15:08:49
от goga_pgasovav