Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php mysql中显示特定年份的记录_Php_Mysql_Select Query - Fatal编程技术网

在php mysql中显示特定年份的记录

在php mysql中显示特定年份的记录,php,mysql,select-query,Php,Mysql,Select Query,我有一个系统,每年显示记录。我有一个下拉菜单,用户从中选择年份,我将该值存储在变量$year中。因此,现在当$year=2013-2014年时,它不应该显示2014-2015年的记录。顺便说一句,当我插入我的合同号时,我也会插入用户在登录时选择的年份。e、 g.合同编号=12013-2014 我试过这样问: SELECT * FROM contract WHERE contarctNumber RLIKE "^$year"; 现在,当我选择2014-2015年时,它仍然显示2013-2014年

我有一个系统,每年显示记录。我有一个下拉菜单,用户从中选择年份,我将该值存储在变量$year中。因此,现在当$year=2013-2014年时,它不应该显示2014-2015年的记录。顺便说一句,当我插入我的合同号时,我也会插入用户在登录时选择的年份。e、 g.合同编号=12013-2014

我试过这样问:

SELECT * FROM contract WHERE contarctNumber RLIKE "^$year";
现在,当我选择2014-2015年时,它仍然显示2013-2014年的所有记录

有什么建议吗?

试试这个查询

SELECT * FROM contract WHERE contarctNumber LIKE "%$year";
范例

选择查询

输出

如果合同编号始终在日期范围内结束,为什么不使用:

SELECT * FROM contract WHERE contarctNumber LIKE "%$year";
这意味着它将匹配所选$year之前的任何内容,但仍然匹配指定的范围

备选案文2:

SELECT * from contract where RIGHT(contarctNumber, 9) = '$year';

这是PHP问题还是数据库设计?您没有与每个合同关联的时间戳字段吗?这是一个PHP问题。不,我没有时间戳字段。但我有contractDate字段,由用户手动插入。@ashah142您应该将日期转换为int unix时间戳或mysql日期类型。否则,如果数据库增长,类似的操作将需要很长时间。另外,为什么不使用ISO8601日期,这样至少可以对其进行排序,并使其成为搜索时更有效的索引?我尝试过这样做,但当我选择2014-2015年时,它仍然显示2013-2014年的记录,因为它们都有2014年的记录。like命令中的-不是特殊字符,因此该语句应该可以工作。contractNumber是什么类型的字段?您可能想尝试二进制代码,比如%$yearcontarctNumber是varchar。所以我想二进制的LIKE不是一个选项。@ashah142您可以始终使用合同中的SELECT*,其中RIGHTcontarctNumber,9='$year';如果没有其他东西对你有用。我试过了,但是当我选择2014-2015年时,它仍然显示2013-2014年的记录,因为它们都有2014年的共同点。@ashah142不,不会的,你可以在这里查看演示,它似乎在这里工作,但使用“%$year”,它仍然显示2013-2014年的记录。$query=select*。。。。。。;echo$query;。。。并检查数据库中的输出…以获取一些ideas@ashah142你能给我看看下拉代码吗,这样我就能更好地帮助你,或者回显你的代码,这会帮助你吗
| CONTARCTNUMBER |
------------------
|    1#2014-2015 |
|    2#2014-2015 |
SELECT * FROM contract WHERE contarctNumber LIKE "%$year";
SELECT * from contract where RIGHT(contarctNumber, 9) = '$year';