我按商店“分组”我的数据库中的所有交易。如何显示查询后未分组的所有其他交易?
这是我正在使用的查询:
$query = mysql_query("SELECT * FROM deals WHERE DATE_FORMAT(expiration_date,'%Y-%m-%d %H:%i:%s') >= NOW() $cat ORDER BY deal_id ASC") or die(mysql_error());
答案 0 :(得分:0)
稍微不同的是,像这样的查询基于日期检索记录是不好的。
SELECT *
FROM deals
WHERE DATE_FORMAT(expiration_date,'%Y-%m-%d %H:%i:%s') >= NOW()
AND cat1 LIKE '%$geef%'
ORDER BY deal_id ASC
您的到期日期是什么格式?鉴于您将它传递给DATE_FORMAT,我认为它是DATE或DATETIME类型。将您的expiration_date
包装在DATE_FORMAT中意味着优化器无法在该字段上使用索引,从而强制进行全表扫描。这是坏消息!
删除DATE_FORMAT会得到相同的结果 -
SELECT *
FROM deals
WHERE expiration_date >= NOW()
AND cat1 LIKE '%$geef%'
ORDER BY deal_id ASC
现在优化器将能够使用包含expiration_date的索引作为索引中的第一个字段。
您有一个名为cat1
的字段这一事实让我认为您可能有其他类别字段。再次,这是坏消息。跨列重复组不是你的朋友。他们使各种事情变得比他们需要的更难,而且效率低下。请阅读First Normal Form上的这篇文章。