2014-06-26 4 views
2

Salut gars que j'ai un champ dans la base de données comme champ JSONMysql Regexp Sélectionnez par numéro

table some_table 

field| {"number":34,"name":"john"} 
field| {"number":60,"name":"mary"} 
field| {"number":44,"name":"mark"} 

Je veux faire une requête et sélectionner des données où nombre> une valeur

select from some_table where field regexp (get_number) > 40 

Est-ce possible?


Je trouve cet exemple pour faire un regexp sélectionner mais seulement les données correspondant à

SELECT id FROM table_name WHERE field_name REGEXP '"key_name":"([^"]*)key_word([^"]*)"'; 

mais je veux faire une sélection dans un JSON où un nombre est à l'intérieur plus grand que ...

merci à tous pour votre aide future.

+0

Regex n'est pas un bon choix pour vérifier les plages de numéros. – developerwjk

+2

normalise le db, arrêtez de stocker des données comme ceci –

+0

Vous travaillez vraiment votre chemin dans un coin. Vous devez modifier la conception de votre base de données afin de pouvoir interroger chaque élément de données. – ssergei

Répondre

2

D'abord, je veux vous dire que vous ne pouvez pas extraire regex « captures » sur MySQL, vous ne pouvez « match »

2, je veux vous dire que la requête suivante ne fonctionnera que si « nombre » est le premier élément

SELECT * FROM some_table WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(field,',',1),':',-1) > 40 

Il utilise SUBSTRING_INDEX de MySQL pour obtenir la chaîne avant le premier « » qui se traduit à: { « nombre »: 34

puis obtenir la chaîne après la dernière " : "(qui dans ce cas, al de sorte que le premier)

qui se traduira par:

modifier: Voici une autre version qui permettra un autre ordre

SELECT * FROM some_table WHERE SUBSTRING_INDEX(SUBSTRING_INDEX('{"number":34,"name":"john"}','"number":',-1),",",1) > 40 

premier appel fait: 34, "name" : "john"} Deuxième appel fait: 34

SUBSTRING_INDEX: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring-index

+1

test, merci pour votre soutien. –

2

Avez-vous la possibilité de charger des plugins sur la base de données MySQL? Si oui, cela pourrait être exactement ce que vous cherchez:

http://blog.kazuhooku.com/2011/09/mysqljson-mysql-udf-for-parsing-json.html

Avec le plugin UDF mysql_json compilé et installé, vous seriez en mesure d'exécuter des requêtes comme ceci:

SELECT whatever_columns 
    FROM some_table 
    WHERE json_get(field, 'number') > 40 

I Je n'ai pas encore essayé, mais je voudrais voir si cela fonctionne pour vous.

+0

il a travaillé avec albertdiones aproach. mais peut-être que ce plugin pourrait aussi fonctionner. ty –