2014-09-27 2 views
0

나는 단지 사용자가 1986 년 이후에 태어난 모든 사용자 uid를 선택할 수있는 선택 쿼리를 원합니다.json 형식 데이터에서 쿼리 선택

이 쿼리를 시도했지만 일치하는 숫자 만 선택합니다 LIKE 검색. 여기

SELECT uid FROM {profile_values} WHERE value LIKE '%1986%' 

는 SQL 쿼리

CREATE TABLE IF NOT EXISTS `profile_values` (
    `fid` int(10) unsigned NOT NULL DEFAULT '0', 
    `uid` int(10) unsigned NOT NULL DEFAULT '0', 
    `value` text, 
    PRIMARY KEY (`uid`,`fid`), 
    KEY `fid` (`fid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

INSERT INTO `profile_values` (`fid`, `uid`, `value`) VALUES 
(5, 1, 'a:3:{s:3:"day";s:2:"27";s:5:"month";s:1:"6";s:4:"year";s:4:"1986";}'), 
(5, 3, 'a:3:{s:3:"day";s:2:"15";s:5:"month";s:1:"9";s:4:"year";s:4:"1910";}'), 
(5, 4, 'a:3:{s:3:"day";s:2:"26";s:5:"month";s:1:"6";s:4:"year";s:4:"1986";}'), 
(5, 5, 'a:3:{s:5:"month";s:1:"4";s:3:"day";s:2:"26";s:4:"year";s:4:"2014";}'), 
(5, 6, 'a:3:{s:3:"day";s:2:"26";s:5:"month";s:1:"4";s:4:"year";s:4:"2014";}'), 
(5, 7, 'a:3:{s:5:"month";s:1:"4";s:3:"day";s:2:"26";s:4:"year";s:4:"2014";}'), 
(5, 8, 'a:3:{s:3:"day";s:2:"26";s:5:"month";s:1:"4";s:4:"year";s:4:"1987";}'), 
(5, 17, 'N;'), 
(5, 18, 'N;'), 
+0

세상에 대한 http://www.tutorialspoint.com/mysql/mysql-regexps.htm을 참조하시기 바랍니다해야합니다 있는지 확인 직렬화 된 배열 대신에 – Ghost

+0

저장하기 전에 문자열을 디코드하거나 정규화 된 방식으로 저장하거나 PHP에서 검색을 수행하십시오 (자바 스크립트 사용) – Strawberry

+0

첫 번째 것 이 것이 권장되지 않기 때문에 더 구조화 된 데이터베이스를 만드는 것입니다. –

답변

0

당신은 정규 표현식을 시도 할 수있다. REGEXP 일치 조건은 LIKE와 비슷하지만 LIKE는 와일드 카드 "%"및 "_"을 사용하여 단순 패턴 일치 만 수행하고 REGEXP는 복잡한 정규 표현식 패턴 일치를 수행하여 LIKE보다 훨씬 많은 문자열 패턴 패턴과 일치시킬 수 있습니다.

SELECT uid FROM {profile_values} 
WHERE value REGEXP '[1][9][8][6-9]|[1][9][9][0-9]|[2-9][0-9][0-9][0-9]'; 

그럼 여기에 우리가 왜 당신 할 수있는, 우리의 표현은 4 자리 숫자를 고려하고 또한 수보다 큰 1986

so [1][9][8][6-9] -->> makes sure number is between 1986 to 1989 
next [1][9][9][0-9] -->> makes sure number is between 1990 to 1999 
last [2-9][0-9][0-9][0-9] -->> makes sure number is between 2000 to 9999 

+0

이 쿼리는 1986 년 이후에 태어난 사용자 목록의 레코드를 반환하지 않습니다. –

+0

미안합니다 내 나쁜 내가 방금 1986 년 이후에 읽었습니다. –

+0

@AbdullaChozhimadathil를 확인하십시오. 이제는 효과가 있어야합니다. –

관련 문제