2017-02-09 29 views
-1

在可以搜索表中的用戶記錄的界面中搜索。使用年齡和性別在表中搜索ID號

運營商必須能夠按年齡和/或用戶性別(記錄)進行搜索。但是,這必須通過使用捕獲的用戶的ID號完成。

這是可能的,因爲ID號碼可以分解爲可用數據。

身份證號碼有13個DIGITS:

例如, 6911205062080

其中又可細分如下:

YYMMDDSSSSCAZ

凡(YYMMDD)是指日期。 1969年11月20日顯示爲691120

(SSSS)是指性別。女性被分配的數字範圍爲0000-4999,男性的數字爲5000-9999

CAZ也帶有含義,但它們與問題的上下文無關。 `

用戶可以選擇搜索所有年齡段,或從三個年齡段選擇:

答:18-38,B:向上60:39-59,C。

- 他們可以選擇一個選項[A或B或C]

-Or他們可以選擇兩個選項[A和B,A和C或B和C],

-Or它們可以選擇全部3個選項[A和B和C],這意味着所有這些)

這意味着如果他們選擇而不是來搜索所有年齡組,則包含其選擇的數組將被張貼。

當選擇性別:

- 他們可以搜索所有性別[男&女]

-Or選擇一個選項[男性或女性]

的數據被髮送到我現在我必須操縱數據才能返回正確的記錄。

現在我知道我必須使用子字符串。 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號和因此,正確的記錄?

+4

難道你不能將相關數據存儲在分隔的列中,比如'sex'和'birthDate'嗎? –

+0

@Mattea這將是理想的,但我不能決定。 –

+1

這就是爲什麼你不應該試圖在單個列中存儲多條信息的原因。你遇到這樣的問題。此外,您將無法根據出生日期或性別輕鬆對列表進行排序,如果您有超過5000名女性註冊,會發生什麼情況?如果您將性別,DOB等存儲在具有適當數據類型的單獨列中,您將會變得更好。 – GordonM

回答

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"; 
} 
0

首先,你需要提取從ID-S年度部分的信息: 您需要使用字符串和字符串contatenation這一點。 之後,您需要將其轉換爲日期並使用now()函數來獲取日期差異。 SELECT DATEDIFF(year,'2011-10-02','2012-01-01'); Finaly你需要這樣的分支之間創建:

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

性別: 同樣的方式,從ID中提取的信息與子,將其轉換爲數字。

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

您還需要創建AND,OR運算符。