我正在尝试实施搜索,用户可以搜索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
的列中答案 0 :(得分: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
可以获得任何收益,并且您可能会放慢其他可优化查询的速度。
答案 1 :(得分: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>
答案 2 :(得分: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());}