Новости Joomla

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

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
MySQL и json_extract
« : 12.03.2020, 10:19:17 »
Коллеги, прошу помощи, совсем в своей деревне от жизни отстал, не могу разобраться.
Задача - в sql запросе оперирировать данными в строке json (версия базы 5.7 естессно).
Вроде понятно, если в строке просто массив {"id": "10", "value": "Значение"} то все работает как в документации
Код
mysql> SELECT c, JSON_EXTRACT(c, "$.id"), g
     > FROM jemp
     > WHERE JSON_EXTRACT(c, "$.id") > 1
     > ORDER BY JSON_EXTRACT(c, "$.value");

Но у меня там объект json (поле типа reapetable движка), пример значения (адрес может быть один либо несколько):
Код
{"adres0":{"street":"Невский пр.", "house":"45"},"adres1":{"street":"Рубинштейна ул.", "house":"2"}}
.
Задач несколько:
 - в поле WHERE найти совпадения street с входящим значением
 - сделать ORDER BY по house найденного значения улицы
Ну и прочее, смотрю в доку вижу фигу (( Что-то мне подсказывает смотреть в сторону column->>path, но туплю (и как писать в php коде подобный запрос с долларом... совсем стар стал, учиться голова отказывается
Код
SELECT c->'$.name' AS name

P.S. обязательно ли тип поля в базе должен быть JSON для подобных данных? Joomla ведь хранит их как текст (чтобы работало на версиях ниже 5.7)

Заранее благодарен за любую помощь
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Re: MySQL и json_extract
« Ответ #1 : 12.03.2020, 10:40:55 »
А что мешает раскодировать все через json_decode и уже затем оперировать данными?
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: MySQL и json_extract
« Ответ #2 : 12.03.2020, 10:43:30 »
лишняя работа + нагрузка.
Мне нужно выбрать из базы все строки, у которых в поле street будет определенное значение. В случае с json_decode мне нужно выбрать все строки и фильтровать на php. Зачем, когда есть нативная функция в мускуле, осталось только с ней разобраться.
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Re: MySQL и json_extract
« Ответ #3 : 12.03.2020, 11:20:22 »
'$.*.street' - а так если попробовать обращаться ?
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: MySQL и json_extract
« Ответ #4 : 12.03.2020, 14:32:44 »
'$.*.street' - а так если попробовать обращаться ?

Супер! Уже что-то, получил названия улиц. Еще бы идеально понять как с этим работать в плане сортировки, если улица в выборке есть - сортировать по дому. Но это уже сам попробую еще раз вкурить в доку.
Еще раз благодарю за точку отсчета

Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Re: MySQL и json_extract
« Ответ #5 : 26.03.2020, 02:56:49 »
- в поле WHERE найти совпадения street с входящим значением
Слушай я уделен что ВЫ об это спрашиваете !
Для таких решений - вам нужно  Нормальная форма Базы данных
Так получается - если строк по которой Вы ищите соответствия будет больше чем 100 000 - то вполне возможно что ответа от сервака - Вы и не получите !! просто хватит времени на обработку скрипта !!
В тоже время :
Цитата: beliyadm
Мне нужно выбрать из базы все строки, у которых в поле street будет определенное значение.

Да - но то что вы хотите - MySQL - Поведет себя следующим образом !
Он сам раскодирует из Json - Эту строку - создаст временную таблицу из этих данных - и пойдет в ней искать !
Вы там что то говорили о :
 
Цитата: beliyadm
лишняя работа + нагрузка.
То вы же сами и создаете ее !!
Просто сохраните данные так как надо !
Я понимаю -что сайт или DB - Не ваше !! - но все же !! - Сделайте один раз нормально ! - Приберите мусор за (криворукими) - простите людьми !
С Уважением к Вам beliyadm!!
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Re: MySQL и json_extract
« Ответ #6 : 26.03.2020, 11:44:20 »
Он сам раскодирует из Json - Эту строку - создаст временную таблицу из этих данных - и пойдет в ней искать !
Пруф? MySQL хранит в другом формате JSON, который отличается от текста. Плюс можно использовать индексы и поиск будет достаточно быстрым.

И в любом случае это быстрее и менее трудозатратно, чем потом обрабатывать на PHP.

Нормальная форма Базы данных
Единственное с этим нельзя не согласиться
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: MySQL и json_extract
« Ответ #7 : 26.03.2020, 21:07:37 »
Для таких решений - вам нужно  Нормальная форма Базы данных
Я знаю про нормализацию БД, вопрос в том - что мне приходится работать с тем что есть в движке - поле repeatable сохраняет в JSON именно в указанном формате

Я понимаю -что сайт или DB - Не ваше !! - но все же !! - Сделайте один раз нормально ! - Приберите мусор за (криворукими) - простите людьми !
Как раз таки базы данных это мое, правда больше на мелкомягком сикеле, но вопрос не в этом. Вопрос про дефолтный функционал полей движка из коробки, который я менять не планирую )) (если я перепишу хранение данных в более удобный формат - встанет вопрос как это визуализировать в админке материала без хаков, оно мне надо?)
Криворукие ли разработчики нашего любимого движка - вопрос для отдельной темы.

В настроящее время у меня порядка 10 000 объектов, у каждого из которых есть до 5 дополнительных полей, одно из которых в JSON, по которому и нужен поиск и фильтрация. Объемы сильно увеличиваться не будут.

Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Форматирование текста. Вопрос связан с MySQL

Автор Аня

Ответов: 6
Просмотров: 745
Последний ответ 06.05.2018, 00:35:31
от Аня
[решено] создать MySQL-запрос по красоте :)

Автор effrit

Ответов: 13
Просмотров: 860
Последний ответ 30.09.2017, 16:58:21
от effrit
TIMESTAMP и MySQL

Автор NastyUser

Ответов: 2
Просмотров: 912
Последний ответ 01.02.2014, 23:11:34
от NastyUser