2013-07-03 46 views
1

我正在嘗試執行搜索,用戶可以搜索18歲以上或以下的候選人。在搜索期間選擇使用dob的年齡組

在搜索時代組件的HTML:

Age<select id ='eighteen' name="eighteen" size="1" > 
    <option value="Below Eighteen">Below Eighteen</option> 
    <option value="Above Eighteen">Above Eighteen</option> 
    <option value="Any">Any</option> 
    </select> 

PHP代碼:

$age = trim($_POST['eighteen']);  

$query2 = mysql_query("SELECT * FROM p_candidate WHERE YEAR(CURDATE())-YEAR(`age`) >= 18"); 
$query = mysql_query("SELECT * FROM p_candidate WHERE YEAR(CURDATE())-YEAR(`age`) < 18"); 
if ($age =="Below Eighteen") {$dob = $query;} 
if ($age == "Above Eighteen") {$dob = $query2;} 



$Odata = mysql_query("SELECT * FROM p_candidate WHERE(`gender` LIKE '%".$Gender."%') AND (`age` LIKE '%".$dob."%')") or die(mysql_error()); 

當我沒有在搜索表單填寫的性別字段運行這段代碼,我不得到任何結果。我怎樣才能使這個工作?我需要修改哪部分?

我的數據庫是MySQL和候選人的DOB都存儲在一個名爲年齡

+0

2 ???一個人的年齡如何在同一時間低於18歲或以上?試試其他如果:) –

+1

如果它們恰好是18呢? – andrewsi

+0

我已經將query2更改爲$ query2 = mysql_query(「SELECT * FROM p_candidate WHERE YEAR(CURDATE()) - YEAR('age')> = 18」); – user2510479

回答

0

這是我最後用 - if語句現在的工作

if ($age == "Above Eighteen") { 
$Odata = mysql_query("SELECT * FROM p_candidate WHERE(`gender` LIKE '%".$Gender."%') AND  (YEAR(CURDATE())-YEAR(`age`) >= 18)") or die(mysql_error());} 

if ($age == "Below Eighteen") { 
$Odata2 = mysql_query("SELECT * FROM p_candidate WHERE(`gender` LIKE '%".$Gender."%') AND  (YEAR(CURDATE())-YEAR(`age`) < 18)") or die(mysql_error());} 
1

,看看他們是至少18歲的列,可以從當前日期減去18歲及比較其誕生日期(這似乎是age列)。

18歲或以上

SELECT * FROM p_candidate WHERE age <= CURDATE() - INTERVAL 18 YEAR 

在18

SELECT * FROM p_candidate WHERE age > CURDATE() - INTERVAL 18 YEAR 

我也想避免使用LIKE當你不就得了。如果您正在檢查性別F或性別M,那麼只需說WHERE gender = 'F'WHERE gender = 'M'。通過過度使用LIKE,您無法獲得任何收益,而且您可能會放慢其他優化查詢的速度。

+0

謝謝@EdGibbs,但我仍然無法獲取返回值的代碼。 – user2510479

+1

它可能是您的PHP代碼。在你的例子中,你將'$ dob'設置爲'$ query'或'$ query2',但是當你實際執行查詢時(代碼的最後一行),你正在運行一個完全不同的查詢。如果您將'$ dob'設置爲我的查詢之一(加上性別邏輯),然後運行'$ dob'查詢,它應該可以正常工作。另外請注意,你不應該使用'mysql_ *'系列函數,因爲它們可能會導致SQL注入 - 已經有很多來自編碼器的帖子,它們的網站因爲使用了'mysql_ *'方法而遭到黑客入侵,而且它是限制你的網站被黑客攻擊的事情。 –

+0

謝謝@EdGibbs - 我讓它工作最後:)我已經發布了代碼片段的答案。非常感謝您的意見! – user2510479

1

爲您的選擇強制設置一個默認值,以便該字段始終填充一些內容。 像這樣:

Age<select id ='eighteen' name="eighteen" size="1" > 
    <option value="Below Eighteen">Below Eighteen</option> 
    <option value="Above Eighteen">Above Eighteen</option> 
    <option value="Any" selected>Any</option> 
    </select> 
+1

這是一個非常有價值的建議@GuiGreg – user2510479