结合SQL和PHP

结合SQL和PHP,php,sql,sql-order-by,Php,Sql,Sql Order By,不起作用(我已经担心了),它假设元素首先按照MonthFrom在数组$MonthFrom中的位置进行排序,那些具有相同位置的元素应该按照DayFrom进行排序。我知道还有其他的方法来处理日期,但对于这个查询,我必须遵守这个日期结构,任何帮助都将不胜感激 $months = array('January', ... , 'December'); $sql=' SELECT * FROM `residencies` WHERE `Year` = 2010 ORDER BY array_search(

不起作用(我已经担心了),它假设元素首先按照MonthFrom在数组$MonthFrom中的位置进行排序,那些具有相同位置的元素应该按照DayFrom进行排序。我知道还有其他的方法来处理日期,但对于这个查询,我必须遵守这个日期结构,任何帮助都将不胜感激

$months = array('January', ... , 'December');
$sql='
SELECT *
FROM `residencies`
WHERE `Year` = 2010
ORDER BY array_search($months,`MonthFrom`) `DayFrom`';
但这会按照月份名称的字母顺序对它们进行排序吗?你真的需要吗

您还可以根据
MonthFrom
对它们进行排序,并将其转换为php代码中的文本。”

但这将根据月份名称的字母顺序对它们进行排序?你真的需要吗


您还可以根据
MonthFrom
对它们进行排序,并将其转换为php代码中的文本。”

看起来您正在尝试在SQL语句中使用php函数。如果需要按MonthFrom(月份名称)排序,请尝试以下操作:

$sql='
SELECT *
FROM `residencies`
WHERE `Year` = 2010
ORDER BY DATE_FORMAT(`MonthFrom`,"%M") `DayFrom`';

(您可以填写剩余的月份)

看起来您正在尝试在SQL语句中使用PHP函数。如果需要按MonthFrom(月份名称)排序,请尝试以下操作:

$sql='
SELECT *
FROM `residencies`
WHERE `Year` = 2010
ORDER BY DATE_FORMAT(`MonthFrom`,"%M") `DayFrom`';

(您可以填写其余月份)

我从问题中推测,数据库中有一个以字符串格式存储的月份字段,正如其他评论员所说,这会使排序变得棘手,因此您尝试使用数组对月份进行排序

其他人已经提出了有效的方法来实现这一点(我认为幸运的的士的答案可能是迄今为止最好的),但是我会说,如果你有几个月以字符串格式存储在数据库中,那么你肯定有一个糟糕的数据库设计,如果你有选择的话,你应该考虑改变它。


MySQL可以使用DATE或DATETIME数据类型存储完整的日期,因此,如果您现在分别存储日期、月数和年数,则应改为将它们存储在单个字段中。您仍然可以单独查询它们,例如,如果您只需要月份,或者任何组合-MySQL具有非常强大的日期处理功能(PHP也是如此)。

我从问题中推测,数据库中有一个以字符串格式存储的月份字段,正如其他评论者所说,这会使排序变得棘手,因此,您试图使用数组来排列月份

其他人已经提出了有效的方法来实现这一点(我认为幸运的的士的答案可能是迄今为止最好的),但是我会说,如果你有几个月以字符串格式存储在数据库中,那么你肯定有一个糟糕的数据库设计,如果你有选择的话,你应该考虑改变它。


MySQL可以使用DATE或DATETIME数据类型存储完整的日期,因此,如果您现在分别存储日期、月数和年数,则应改为将它们存储在单个字段中。您仍然可以单独查询它们,例如,如果您只需要月份,或者任何组合—MySQL具有非常强大的日期处理功能(PHP也是如此)。

您可以分享更多的代码吗?这与PHP有什么关系?你至少能给出数据库后端吗?MySQL?$months中的array_search是PHP,数据库是MySQL。它可能取决于许多因素,包括您用什么(倒逗号)包装查询以及值是什么etc@Alex:“可以依赖于很多东西”???你看过密码了吗?单引号中有一个对php函数的调用。你能再分享一些代码吗?这与php有什么关系?你至少能给出数据库后端吗?MySQL?$months中的array_search是PHP,数据库是MySQL。它可能取决于许多因素,包括您用什么(倒逗号)包装查询以及值是什么etc@Alex:“可以依赖于很多东西”???你看过密码了吗?单引号中有一个对php函数的调用。我知道,但数据库是以前设计的,网站的其他部分依赖于此结构,因此如果我只是更改数据库,其他人的部分将不再工作-但从长远来看,它肯定会被考虑,但这不仅仅是我的要求,所以现在我试着接受它,直到达成协议,我知道,但数据库是以前设计的,网站的其他部分依赖于这种结构,所以如果我只是更改数据库,其他人的部分将不再工作-但从长远来看,它肯定会被考虑,但这不只是我的决定,所以现在我试着接受它直到达成协议
$month_arr = array("January","February","March");

$months = implode("', '", $month_arr);

$query="SELECT * FROM residencies WHERE year = 2010 ORDER BY FIELD('MonthFrom', '$months'), `DayFrom`;