如何在分组依据后显示所有其他结果

时间:2012-03-28 11:29:00

标签: php mysql

我按商店“分组”我的数据库中的所有交易。如何显示查询后未分组的所有其他交易?

这是我正在使用的查询:

$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());

1 个答案:

答案 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上的这篇文章。