我想知道在{-1}}和datetime
之间哪一个是在php-mysql中处理的最佳选择。
我需要做的事情基本上是:按日期排序,并选择具有特定年份的所有行。它甚至可能吗?
我可以在php-mysql中选择具有特定年份或月份的所有行吗?就像timestamp
一样?
答案 0 :(得分:1)
这是一种做你想做的OOP方式,参考文献如下。
namespace Connection;
class Database
{
protected $Con;
public function __construct()
{
$this->Con = new PDO("MySQL:host=X;dbname=X", "user", "pass");
}
public function GetInstance()
{
return $this->Con;
}
}
// end class
$sql = "SELECT * FROM Table WHERE DATE_FORMAT(Column, %Y) = 2014";
use Connection;
$smpt = ((new Database)->GetInstance()
->Prepare($sql))
->execute();
foreach ($smpt->fetchAll() as $row):
echo $row['Column'];
endforeach;
Look at this StackOverflow answer for the difference between DateTime and TimeStamp.
<强>参考文献:强>
答案 1 :(得分:1)
为获得最佳数据库性能,请在裸列上使用条件。不要将它们包装在函数中。例如,假设dtcol是数据类型DATE,DATETIME或TIMESTAMP ...
SELECT t.dtcol
FROM mytable t
WHERE t.dtcol >= '2014-01-01'
AND t.dtcol < '2015-01-01'
这也可以表达出来:
WHERE t.dtcol >= '2014-01-01'
AND t.dtcol < '2014-01-01' + INTERVAL 1 YEAR
如果有一个索引dtcol
作为前导列,MySQL可以使用索引范围扫描操作。
不要这样做:
WHERE YEAR(t.dtcol) = 2014
这将强制MySQL评估表中每个行的函数,并将函数的结果与文字进行比较。
您不会注意到小型测试表的任何性能差异。但是你会在忙碌的系统中的大表上注意到它(以一种缓慢痛苦的方式)。
DATETIME和TIMESTAMP之间存在一些显着差异。
DATETIME支持更大范围的值。
目前,TIMESTAMP被实现为Unix风格的32位“自纪元开始以来的秒数”,其中一系列值从'1970-01-01 00:00:01'上升到一段时间后' 2038年1月19' 日。