PHP сортировка по сериализованным данным

0

У меня есть таблица MySQL с клиентами в ней, обычные данные, имена, адреса, номера телефонов и т.д. У меня также есть поле, которое называется "ролями", в котором клиент делает отметку о том, что им нравится делать, графический дизайн, иллюстрации и т.д. и т.д., эти данные попадают в поле, сериализованное с каждым кодом ролей. Ниже приведен пример.

a:3:{s:4:"_wfa";s:2:"on";s:3:"_CS";s:2:"on";s:3:"_CM";s:2:"on";}

На странице "viewall" мне нужно вывести все данные для пользователя, который отметил галочку в определенном поле, в качестве примера мне нужно вывести всех пользователей, которые отметили флажок "_wfa".

Я надеюсь, что это имеет смысл, я не могу понять, как это сделать.

Надеюсь, кто-то может пролить свет на это.

Приветствия,

  • 0
    у вас есть одно поле, содержащее объект JSON? Вам придется разбирать поля по отдельности. Вы пытаетесь сделать это в SQL?
  • 0
    Это не объект JSON. Смотрите php.net/manual/en/function.serialize.php
Теги:

3 ответа

2
Лучший ответ

В одном столбце строки не должно быть больше одного значения. Сохраните роли в своей собственной таблице базы данных с идентификатором пользователя, и вы сможете просто спросить MySQL для пользователей с требуемой ролью.

CREATE TABLE user_roles (user_id INT, role_name VARCHAR(100));
INSERT INTO user_roles (1, '_wfa');
INSERT INTO user_roles (1, '_CS');
INSERT INTO user_roles (1, '_CM');

SELECT users.id FROM users INNER JOIN user_roles ON users.id = user_roles.user_id WHERE user_roles.role_name = '_wfa';
  • 0
    Интересно ... Как мне сделать оператор вставки, если роли являются динамическими?
  • 1
    INSERT INTO user_roles ($ user_id, '$ role_name')? Имена ролей здесь уже являются произвольными строками.
1

Вы должны нормализовать это в таблице. После сериализации это означает, что вы не можете использовать какие-либо преимущества SQL на нем, а также для его разбора требуется PHP (или настраиваемый код для другого языка).

  • 0
    Эй, спасибо за ответ, как я могу поместить нормализованные данные в базу данных, если «роли» являются динамическими?
  • 0
    @Chris: вам действительно нужно больше узнать о теории реляционных баз данных, чтобы правильно «нормализовать» данные
1

MySQL или любая база данных не могут не выполнять арифметику данных, выполняемых внешним языком программирования. Единственный способ получить данные - это вытащить его и нециализировать в PHP, прежде чем вы сможете использовать данные.

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

Переход на SQL, объекты становятся таблицами - они похожи на массивы. Атрибуты объектов становятся столбцами, но когда объект содержит массив других объектов - этот атрибут получает статус таблицы... Нормализация означает принятие таких вещей, как роли, и создание таблицы кодов для них, к которой вы можете обратиться в других таблицах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню