- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Не силен в синтаксисе запросов к этой субд, у меня такой вопрос, есть элементарная таблица с товарами с полями id, name, description, createdate .... parameters
Так вот, в поле parameters как раз самое интересное. Это поле содержит текстовую запись вида:
{"color":"red", "height":"545", "length":"110"} в общем, json
Возможно ли задать запрос в базу так, чтобы выбрать все товары, у которых высота (height) будет между 400 и 600 ?
Как вообще можно реализовать такую задачу?
Заранее спасибо!
Нет.. отказывайтесь от джейсона, если надо выборку проводить по параметрам..
Теоретически, думаю можно соорудить и запрос к такой табличке с помощью реулярок. Но на практике я бы не стал этого делать ибо скорость такого решения будет огорчать безмерно.
Я бы не парился и сделал бы дерзко.
Вытащил бы все id и parameters, декодировал JSON, присоединил id к массиву и искал в массиве. С полученными id опять лез бы в базу.
По рукам и губам нужно бить даже за одну мысль о реализации подобного...Бить больно и сильно, пока глупая голова "прАмгрАМиста" не вернётся на землю и перестанет придумывать всякую чепуху.
в поле parameters как раз самое интересное. Это поле содержит текстовую запись вида:
{"color":"red", "height":"545", "length":"110"} в общем, json
Возможно ли задать запрос в базу так, чтобы выбрать все товары, у которых высота (height) будет между 400 и 600 ?
Можно ссорудить конструкцию типа такой:
SELECT * FROM `имя_таблицы` WHERE parameters LIKE '%"height":"4__",%' OR parameters LIKE '%"height":"5__",%' OR parameters LIKE '%"height":"6__",%', выгребет от 400 до 600 включительно.
В более сложных случаях придётся выгребать все записи и отсеивать регуляркой на PHP.
По рукам и губам нужно бить даже за одну мысль о реализации подобного...Бить больно и сильно, пока глупая голова "прАмгрАМиста" не вернётся на землю и перестанет придумывать всякую чепуху.
Даже комментировать не буду...
Мысль идет не о реализации, а о том, что это УЖЕ реализовано, и теперь надо доработать так, чтобы можно было бы не вытягивать все из базы, а потом обрабатывать массивом, а как-то "умнее". Иначе, прийдется уже тогда вытягивать все.
Нет.. отказывайтесь от джейсона, если надо выборку проводить по параметрам..
Дело не в json. Даже, если бы поле содержало бы запись "color=red, height=545, length=110" то история была бы, думаю, той же..
Я бы не парился и сделал бы дерзко.
Вытащил бы все id и parameters, декодировал JSON, присоединил id к массиву и искал в массиве. С полученными id опять лез бы в базу.
Можно, но это решение "в лоб". Представьте, что записей (товаров) в таблице 100000. При каждом обращении будет в оперативе образовываться такая громадина?..
И вместо массива, скажем, из 10-15-20 товаров я буду КАЖДЫЙ раз получать и обрабатывать массив из ста тысяч. А вообще, насколько сильно такая реализация будет грузить сервак? Может, я преувеличиваю?
Можно ссорудить конструкцию типа такой:
SELECT * FROM `имя_таблицы` WHERE parameters LIKE '%"height":"4__",%' OR parameters LIKE '%"height":"5__",%' OR parameters LIKE '%"height":"6__",%', выгребет от 400 до 600 включительно.
В более сложных случаях придётся выгребать все записи и отсеивать регуляркой на PHP.
Спасибо за идею. Надо об этом подумать. Пока самый вразумительный ответ.
В общем, как я понял в mysql нет такого синтаксиса, чтобы на лету выбрал из базы так, как я хочу. Надо извращаться только подобным образом?
ИМХО Вы не используете базу данных как реляционную базу. Все в sql есть но sql это structure query language а не способ хранить данные не в файлах. Подредактируйте структуру базы и будет вам счастье.
Лучше создать несколько дополнительных полей, написать скрипт чтобы разбить атрибуты нормально и пользоваться стандартным SQL Between. Если это нормальный проект.
В общем, как я понял в mysql нет такого синтаксиса, чтобы на лету выбрал из базы так, как я хочу. Надо извращаться только подобным образом?
Форма представления данных (в БД MySQL) сильно влияет на способы из обработки.
Этим и вызвана некоторая резкость поста CyBase - классические программисты, они мыслят сразу объектно-ориентированно :)
Оператор LIKE ищет не точно, а по шаблону, _ - означает один любой символ, % - любое количество сиволов.
Практически - это шаблон по регулярному выражению.
А "долбать" джонсон-а Мускул не умеет.
У него есть встроенные строковые функции типа SUBSTRING() и тп, можно написать и свои функции, которые будут парсить json.
Но вот будет ли это быстро работать...
Форма представления данных (в БД MySQL) сильно влияет на способы из обработки.
Этим и вызвана некоторая резкость поста CyBase - классические программисты, они мыслят сразу объектно-ориентированно :)
Оператор LIKE ищет не точно, а по шаблону, _ - означает один любой символ, % - любое количество сиволов.
Практически - это шаблон по регулярному выражению.
А "долбать" джонсон-а Мускул не умеет.
У него есть встроенные строковые функции типа SUBSTRING() и тп, можно написать и свои функции, которые будут парсить json.
Но вот будет ли это быстро работать...
Большое спасибо за содержательный ответ. Теперь буду активно думать по этому вопросу.
Остается только единственный вопрос. Если, все-таки, сгребать всю базу из, скажем, 10 - 20 тыс. записей, потом циклом перебирать и выводить уже с помощью php то, что мне надо, будет ли это грузить сервак сильно или терпеть можно?
ПС: хотя, если изучить регулярки (http://www.mysql.ru/docs/man/Regexp.html) и функции (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring), то, думаю, можно что-то слепить
А не думали над вариантом переделать структуру базы?
Лучше один раз переделать, чем потом всю жизнь мучиться с записями вида: "{"color":"red", "height":"545", "length":"110"}"