2010-11-10 5 views
0

J'ai une table MySQL avec les clients, les données habituelles, les noms, les adresses, les numéros de téléphone etc etc J'ai aussi un champ qui est appelé «rôles» dans lequel un client cocher ce qu'ils veulent pour faire le codage, la conception graphique, les illustrations, etc etc .. ces données sont poussées dans le champ sérialisé avec chaque code de rôles, ce qui suit est un exemple.PHP Tri des données sérialisées

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

Sur une page « viewall », je dois sortir tous les détails pour un utilisateur qui a fait tic tac une boîte spécifique, à titre d'exemple, j'ai besoin de sortir tous les utilisateurs qui ont coché la case « _wfa ».

J'espère que cela a du sens, je ne peux pas sembler comprendre comment le faire.

J'espère que quelqu'un peut faire la lumière sur ce sujet.

Cheers,

+0

vous avez un seul champ contenant un objet json? Vous allez devoir analyser les champs individuellement. Essayez-vous de le faire en SQL? – jcolebrand

+0

Ce n'est pas un objet JSON. Voir http://php.net/manual/en/function.serialize.php –

Répondre

2

Vous ne devriez jamais avoir plus d'une valeur dans une seule colonne d'une ligne. Stockez les rôles dans leur propre table de base de données, avec l'ID de l'utilisateur, et vous pourrez simplement demander à MySQL pour les utilisateurs avec un rôle comme vous le souhaitez.

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

Intéressant ... Comment faire une instruction d'insertion si les rôles sont dynamiques? – Chris

+1

INSERT INTO user_roles ($ user_id, '$ role_name')? Les noms de rôle sont déjà des chaînes arbitraires. –

1

Vous devez normaliser cela dans une table. L'avoir sérialisé signifie que vous ne pouvez utiliser aucun des avantages de SQL, et que l'analyse nécessite PHP (ou un code personnalisé pour l'autre langue). MySQL, ou toute base de données, ne peut pas désérialiser les données exécutées par un langage de programmation externe.

+0

Hey, merci pour la réponse, comment pourrais-je mettre des données normalisées dans la base de données si les «rôles» sont dynamiques? – Chris

+0

@Chris: Vous devriez en savoir plus sur la théorie des bases de données relationnelles pour "normaliser" correctement les données – stillstanding

1

La seule façon d'extraire les données est de les retirer et de les désinscrire en PHP avant de pouvoir utiliser les données. La seule façon de tirer parti de l'utilisation d'une base de données est d'y stocker des données, en utilisant des tables et des types de données natifs pour renforcer la cohérence des données. La normalisation et l'intégrité référentielle fonctionnent pour minimiser la duplication des données tout en appliquant les règles métier.

Transition vers SQL, les objets deviennent des tables - ils sont comme des tableaux. Les attributs d'objet deviennent des colonnes, mais lorsqu'un objet contient un tableau d'autres objets - cet attribut est promu comme étant une table ... Normaliser signifie prendre des choses comme des rôles, et créer une table de code à laquelle vous pouvez vous référer dans d'autres tables.

Questions connexes