在可以搜索表中用户记录的界面中。
操作员必须能够按用户的年龄和/或性别(记录)进行搜索。但是,必须使用捕获的用户的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号,从而得到正确的记录?
答案 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运算符。