У меня есть таблица MySQL с клиентами в ней, обычные данные, имена, адреса, номера телефонов и т.д. У меня также есть поле, которое называется "ролями", в котором клиент делает отметку о том, что им нравится делать, графический дизайн, иллюстрации и т.д. и т.д., эти данные попадают в поле, сериализованное с каждым кодом ролей. Ниже приведен пример.
a:3:{s:4:"_wfa";s:2:"on";s:3:"_CS";s:2:"on";s:3:"_CM";s:2:"on";}
На странице "viewall" мне нужно вывести все данные для пользователя, который отметил галочку в определенном поле, в качестве примера мне нужно вывести всех пользователей, которые отметили флажок "_wfa".
Я надеюсь, что это имеет смысл, я не могу понять, как это сделать.
Надеюсь, кто-то может пролить свет на это.
Приветствия,
В одном столбце строки не должно быть больше одного значения. Сохраните роли в своей собственной таблице базы данных с идентификатором пользователя, и вы сможете просто спросить 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';
Вы должны нормализовать это в таблице. После сериализации это означает, что вы не можете использовать какие-либо преимущества SQL на нем, а также для его разбора требуется PHP (или настраиваемый код для другого языка).
MySQL или любая база данных не могут не выполнять арифметику данных, выполняемых внешним языком программирования. Единственный способ получить данные - это вытащить его и нециализировать в PHP, прежде чем вы сможете использовать данные.
Единственный способ получить любую ценность от использования базы данных - это хранить в ней данные, используя таблицы и собственные типы данных для обеспечения согласованности данных. Работа по нормализации и ссылочной целостности минимизирует дублирование данных при соблюдении бизнес-правил.
Переход на SQL, объекты становятся таблицами - они похожи на массивы. Атрибуты объектов становятся столбцами, но когда объект содержит массив других объектов - этот атрибут получает статус таблицы... Нормализация означает принятие таких вещей, как роли, и создание таблицы кодов для них, к которой вы можете обратиться в других таблицах.