Php 以月/日/年格式在数据库中按名称搜索月份

Php 以月/日/年格式在数据库中按名称搜索月份,php,mysql,Php,Mysql,我正在尝试用php和Mysql开发一个搜索系统,但是如何搜索:例如,数据库中的日期格式为2012-03-26(年/月/日)的3月份。根据列数据的格式,类似的内容可能会起作用:(许多解决方案之一) 选择[任何内容] 从[任何地方] 其中'date`

我正在尝试用php和Mysql开发一个搜索系统,但是如何搜索:例如,数据库中的日期格式为2012-03-26(年/月/日)的3月份。

根据列数据的格式,类似的内容可能会起作用:(许多解决方案之一)

选择[任何内容]
从[任何地方]
其中'date`<'2012-03-31 23:59:59'
和'date`>'2012-03-01 00:00:00'

根据列数据的格式,类似的方法可能有效:(许多解决方案之一)

选择[任何内容]
从[任何地方]
其中'date`<'2012-03-31 23:59:59'
和'date`>'2012-03-01 00:00:00'
试试下面的方法

SELECT   keyword ,  description , url FROM searchTable WHERE MONTH(addDate) = '3' 
SELECT   keyword ,  description , url FROM searchTable WHERE MONTHNAME(addDate) = 'March' 
试试像这样的东西

SELECT   keyword ,  description , url FROM searchTable WHERE MONTH(addDate) = '3' 
SELECT   keyword ,  description , url FROM searchTable WHERE MONTHNAME(addDate) = 'March' 
您可以像这样使用mysql函数:

SELECT * FROM table WHERE MONTH(date_column) = 3
SELECT * FROM table WHERE MONTHNAME(date_column) = 'march'
例如,要搜索March,也可以使用如下MONTHNAME()函数:

SELECT * FROM table WHERE MONTH(date_column) = 3
SELECT * FROM table WHERE MONTHNAME(date_column) = 'march'
您可以像这样使用mysql函数:

SELECT * FROM table WHERE MONTH(date_column) = 3
SELECT * FROM table WHERE MONTHNAME(date_column) = 'march'
例如,要搜索March,也可以使用如下MONTHNAME()函数:

SELECT * FROM table WHERE MONTH(date_column) = 3
SELECT * FROM table WHERE MONTHNAME(date_column) = 'march'

这是一个关于如何处理搜索表单中日期的粗略示例-

<form method="get" action="">
    Year:
    <select name="year">
        <option value="2012">2012</option>
        <option value="2011">2011</option>
        <option value="2010">2010</option>
    </select>
    Month:
    <select name="month">
        <option value="1">January</option>
        <option value="2">February</option>
        <option value="3">March</option>
    </select
    <input type="submit" name="search" value="search"/>
</form>
<?php

if (isset($_GET['search'])) {
    $year = intval($_GET['year']);
    $month = intval($_GET['month']);

    $sql = "SELECT *
            FROM `table`
            WHERE `date` BETWEEN '$year-$month-01' AND LAST_DAY('$year-$month-01')";
}

年份:
2012
2011
2010
月份:
一月
二月
前进

这是一个关于如何处理搜索表单中日期的粗略示例-

<form method="get" action="">
    Year:
    <select name="year">
        <option value="2012">2012</option>
        <option value="2011">2011</option>
        <option value="2010">2010</option>
    </select>
    Month:
    <select name="month">
        <option value="1">January</option>
        <option value="2">February</option>
        <option value="3">March</option>
    </select
    <input type="submit" name="search" value="search"/>
</form>
<?php

if (isset($_GET['search'])) {
    $year = intval($_GET['year']);
    $month = intval($_GET['month']);

    $sql = "SELECT *
            FROM `table`
            WHERE `date` BETWEEN '$year-$month-01' AND LAST_DAY('$year-$month-01')";
}

年份:
2012
2011
2010
月份:
一月
二月
前进


march
转换为
3
并搜索您想要所有三月日期,无论是哪一年,还是只想要一个特定月份的日期?当您说“当数据库中的日期格式为[…](年/月/日)时,这是否意味着日期存储在VARCHAR列中?将
march
转换为
3
并搜索您想要所有三月日期,无论是哪一年,还是只需要一个特定的月份?当您说“当数据库中的日期格式为[…](年/月/日)时,这是否意味着日期存储在VARCHAR列中?例如,如果我搜索三月,它将如何关联?投票结果比使用月()和月名()更好,但您最好使用
date<'2012-04-01'
,而不是
<'2012-03-31 23:59:59'
@Catcall-很好。这完全取决于数据的结构以及检索后的使用方式。@dames-在将请求发送到数据库之前,您必须对请求进行一些数据处理,在数据库中,您可以将月份转换为数字(或直接转换为日期时间/时间戳格式)。这种表达式将使用索引。不过,我认为必须为每一行调用month()和monthname()函数。例如,如果我搜索march,它会有什么关系?投票结果比使用month()和monthname()更好,但你最好使用
date<'2012-04-01'
而不是
<'2012-03-31 23:59:59'
@Catcall-这一点不错。这完全取决于数据的结构以及检索后的使用方式。@dames-在将请求发送到数据库之前,您必须对请求进行一些数据处理,在数据库中,您可以将月份转换为数字(或直接转换为日期时间/时间戳格式)。这种表达式将使用索引。不过,我认为每一行都必须调用month()和monthname()函数。这种“方便”的编程是一场即将发生的性能灾难。对于任何大小的数据集,这都是一种糟糕的方法,因为将常量与列上函数的结果进行比较会导致索引无效。看看orourkek的回答,CatcallIt的进一步评论似乎有点复杂,这是一个用户输入月份名称的搜索,那么我该怎么做?用户如何输入月份名称?如果使用select,则可以将整数值作为值-
1月份
。否则,只需使用月号索引的月名数组
数组(1=>“一月”,2=>“二月”,等等)
。他们从下拉列表中选择月名您可能需要编写少量代码来处理表单并生成合适的查询,但这是一个比编写最简单的,但效率低下,质疑。无论你做什么,都要避免这个答案中建议的解决方案。这是一个非常坏的习惯。这种“方便”的编程是一个即将发生的性能灾难。对于任何大小的数据集,这都是一种糟糕的方法,因为将常量与列上函数的结果进行比较会导致索引无效。看看orourkek的回答,CatcallIt的进一步评论似乎有点复杂,这是一个用户输入月份名称的搜索,那么我该怎么做?用户如何输入月份名称?如果使用select,则可以将整数值作为值-
1月份
。否则,只需使用月号索引的月名数组
数组(1=>“一月”,2=>“二月”,等等)
。他们从下拉列表中选择月名您可能需要编写少量代码来处理表单并生成合适的查询,但这是一个比编写最简单的,但效率低下,质疑。无论你做什么,都要避免这个答案中建议的解决方案。养成这种坏习惯是很不好的。