在mysql列中搜索提供的json值

时间:2015-05-25 09:33:47

标签: php mysql json

我有一个表格内容。列 - > id,title,description。

 CREATE TABLE IF NOT EXISTS `contents` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `description` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

- 转储表格contents -

的数据
INSERT INTO `contents` (`id`, `title`, `description`) VALUES
(1, 'My fab phone', 'I own an iphone 5c.'),
(2, 'I hate my phone', 'I have a Samsung S4. :(');

我有一个由用户输入的json vaue。它就像 - >

[{"devices":"iPhone 5c"},{"devices":"Samsung S4"}] 

我想针对标题,mysql中的描述comlumn进行搜索..我的应用程序是在php中。甚至可能在mysql中?或者我必须操纵json在循环中运行它然后在mysql中进行简单搜索? ...如果它可能在mysql中那么请帮助

3 个答案:

答案 0 :(得分:0)

只需转换MyISAM存储引擎中的表

SELECT  *
FROM    pages
WHERE   MATCH(title, description) AGAINST ('keyword' IN BOOLEAN MODE)

如果在列上创建FULLTEXT索引,这将会快得多:

CREATE FULLTEXT INDEX fx_pages_title_description ON pages (title, description)

,但即使没有索引也能正常工作。

答案 1 :(得分:0)

像这样使用common_schema

select common_schema.extract_json_value(t.title,'/title') , common_schema.extract_json_value(t.description,'/description') from contents t ;

答案 2 :(得分:-1)

SELECT *
FROM `contents`
WHERE
    (`title` = 'iPhone 5c' AND `description` = 'iPhone 5c')
    OR
    (`title` = 'iPhone 5c' OR `description` = 'iPhone 5c');