【发布时间】:2017-02-09 10:18:15
【问题描述】:
在可以搜索表中用户记录的界面中。
操作员必须能够按用户(记录)的年龄和/或性别进行搜索。但是,这必须通过使用捕获的用户的 ID 号来完成。
这是可能的,因为 ID 号可以分解为可用数据。
一个 ID 号有 13 位数字:
例如。 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 and B and 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 号,从而找到正确的记录?
【问题讨论】:
-
您不能将相关数据存储在单独的列中,例如
sex和birthDate? -
@Mattea 那将是理想的,但我无法决定。
-
这就是为什么您不应该尝试在单个列中存储多条信息的原因。你遇到这样的问题。此外,您将无法根据出生日期或性别轻松对列表进行排序,如果注册的女性超过 5000 人会怎样?如果您使用适当的数据类型将性别、出生日期等存储在单独的列中,您的情况会好得多。
-
@AlbertusBrandVenter 你甚至可以让它工作,但我担心有很多记录,没有合适的索引,它的表现会很差。
标签: php sql postgresql