2011-07-15 9 views
1

je les données suivantes dans une colonne dans ma base de données, et j'ai littéralement aucune idée de ce qu'il faut faire pour récupérer un morceau de données que je veux:récupérer une partie des données de MySQL

a:2:{i:1;a:3:{s:8:"property";s:10:"Promo code";s:5:"logic";s:11:"Is equal to";s:5:"value";s:12:"DISCOUNTTIME";}i:2;a:3:{s:8:"property";s:15:"Promo use count";s:5:"logic";s:11:"Is equal to";s:5:"value";s:1:"0";}} 

I J'essaie de récupérer seulement DISCOUNTTIME. Je peux gérer les bases comme

"SELECT x FROM y WHERE id = z" 

mais je n'ai aucune idée de la façon dont ces données sont formatées.

Une aide?

Répondre

2

un coup d'oeil à php unserialize() - il ressemble à votre chaîne est dans ce format

+0

merci pour la réponse rapide. Je vais l'essayer et vous laisser savoir comment ça se passe. – paulruescher

+1

Une fois que vous l'avez essayé et que vous voyez qu'il s'agit d'un tableau multidimensionnel PHP sérialisé, demandez pourquoi vous stockez plusieurs valeurs dans une seule colonne. C'est une mauvaise conception de DB, donc si vous avez l'option, ne le faites pas. –

+0

Malheureusement, je tire ces données d'un plugin WordPress. En dehors de ça, unserialize() fonctionne, je tire ce dont j'ai besoin du tableau, merci Tudor, je réponds comme ça :) – paulruescher

0

Quelle partie de l'expression que vous essayez de récupérer? Peut-être la partie "s: 12" avant DISCOUNTTIME? Si vous essayez simplement de trouver les lignes contenant DISCOUNTTIME, vous pouvez utiliser l'opérateur MySQL INSTR: SELECT * FROM et WHERE INSTR (nom de colonne, 'DISCOUNTTIME')> 0

Si vous essayez de trouver un morceau de texte associé à DISCOUNTTIME, par exemple "s: 12:" alors vous pouvez le faire en combinant INSTR avec d'autres expressions. Si vous savez que le texte précédent aura toujours cinq caractères comme "s: 12:" alors vous pouvez SELECT SUBSTR (nom de colonne, INSTR-5, 5)

Si la structure de la chaîne est très complexe, vous feriez mieux d'écrire un programme pour interroger la base de données et ensuite utiliser regexp ou d'autres techniques pour extraire la chaîne.

Voir Fonctions de chaîne MySQL ici: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_instr

+0

Je pense que cela aurait aussi fonctionné, car les données dont j'ai besoin sont toujours préfixées par s: 12. De toute façon j'ai commencé à utiliser unserialize(), donc je vais m'en tenir à ça. Merci quand même! – paulruescher

Questions connexes