1

我正在尝试实现一个搜索,用户可以搜索 18 岁以上或以下的候选人。

搜索中年龄组件的 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 存储在名为 age 的列中

4

3 回答 3

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,并且可能会减慢原本可以优化的查询。

于 2013-07-03T18:50:10.090 回答
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> 
于 2013-07-03T19:03:03.047 回答
0

这是我最终使用的 - 现在可以使用

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());}
于 2013-07-03T20:06:35.677 回答