使用年龄和性别来搜索表格中的ID号

时间:2017-02-09 10:18:15

标签: php sql postgresql

在可以搜索表中用户记录的界面中。

操作员必须能够按用户的年龄和/或性别(记录)进行搜索。但是,必须使用捕获的用户的ID号来完成此操作。

这是可能的,因为ID号可以分解为可用数据。

ID号有13个DIGITS:

例如。 6911205062080

可以分解如下:

YYMMDDSSSSCAZ

其中(YYMMDD)指日期。 1969年11月20日显示为691120

(SSSS)是指性别。女性被分配的范围为0000-4999,男性的数字为5000-9999

CAZ也带有意义,但它们与问题的背景无关。 `

用户可以选择搜索所有年龄段,或从三个年龄段中选择:

A:18-38,B:39-59,C:60以上。

- 他们可以选择一个选项[A或B或C]

- 或者他们可以选择两个选项[A和B,A和C或B和C],

- 或者他们可以选择所有3个选项[A和B和C],意思是所有选项

这意味着如果他们来搜索所有年龄段,则会发布包含其选择的数组。

选择性别时:

- 他们可以搜索所有性别[男性和女性]女]

- 或选择一个选项[男性或女性]

数据被发送给我,现在我必须操纵数据才能返回正确的记录。

现在我知道我必须使用子串。 ID字段存储为字符变化但是为了确定年龄,我必须将(YYMMDD)部分子串并将其转换为日期以便正确地比较它,并且(SSSS)必须被转换为整数到确定它是否小于5000

到目前为止,这是我的代码:

if($_POST['gender'] == 'all'){
    $gender="";
}elseif($_POST['gender'] == 'male'){
    $gender = " and userIDNumber = "."ESTABLISH ALL ID's THAT ARE MALE";
}elseif($_POST['gender'] == 'female'){
    $gender = " and userIDNumber = "."ESTABLISH ALL ID's THAT ARE FEMALE";
}

$age = "";
if($_POST['radioAge'] == 'select'){
    $branches = " and userIDNumber in (SELECT A WAY TO FIND OUT HOW TO ESTABLISH THE AGES THAT FALL IN THE GROUPS SPECIFIED BY THIS ARRAY in(".  implode(",", $_POST['age_group']).")) ";
}

$query = "SELECT * FROM user_table WHERE status='Active'".$gender.$age;

使用PHP和SQL,我如何使用已发布的性别选择和年龄选择来查找正确的ID号,从而得到正确的记录?

2 个答案:

答案 0 :(得分:1)

为性别尝试这样的事情:

if($_POST['gender'] == 'all'){
    $gender="";
}elseif($_POST['gender'] == 'male'){
    $gender = "and CONVERT(SUBSTR(userIDNumber, 6, 4), INTEGER) < 5000";
}elseif($_POST['gender'] == 'female'){
    $gender = "and CONVERT(SUBSTR(userIDNumber, 6, 4), INTEGER) >= 5000";
}

答案 1 :(得分:0)

首先,您需要从年份部分的ID-s中提取信息: 您需要为此使用子字符串和字符串连接。 之后,您需要将其转换为日期并使用now()函数来获取日期差异。 SELECT DATEDIFF(年,'2011-10-02','2012-01-01'); 最后你需要在这样的分支之间创建:

 ... where  DATEDIFF(year, '2011-10-02', now()) between 18 and 38 ...

性别: 同样,使用substring从id中提取信息,将其转换为数字。

... where CAST(substring(ID) as numeric) <5000 --female

您还需要创建AND,OR运算符。