在PHP中,我如何要求mySQL数据库检索匹配某个值的多个最新记录


In PHP, how do I ask a mySQL database to retrieve multiple most recent records that match a certain value?

我有一个表,它有以下字段:

candy_name
candy_type
candy_amount
candy_vendor

一个candy_type可以有多个candy_name,比如"gummis"可能有"orange"、"watermelon"、"sour watermelon"等等。

我正在做的是按供应商搜索这个表,然后我想看到每个唯一candy_type(忽略candy_name)的最新条目。也就是说,为每个惟一的candy_type最近添加的行。

我知道了如何查找表中所有唯一的candy_types:

$sql = "SELECT DISTINCT candy_type FROM candy_table 
               WHERE candy_vendor LIKE '%$user_searchbox_input%' 
               ORDER BY candy_vendor ASC";
$result=mysql_query($sql);

现在我需要找出如何为每个唯一的candy_type检索MOST RECENT记录。

就像"gummi"的candy_type一样,如果匹配该类型的最后一条记录是"orange",那么我想看到的就是它——而不是其他的。
对于"巧克力"的candy_type,如果最后匹配的记录是"牛奶",则我不关心其他记录,但我想检索与该candy_type匹配的最近记录。

我该怎么做?

如果您想要最近的,使用having子句,并结合group by,因为组by已经选择了不同的列,您可以删除distinct子句。

$user_searchbox_input = mysql_real_escape_string($user_searchbox_input);
$sql = "SELECT candy_type FROM candy_table 
               WHERE candy_vendor LIKE '%$user_searchbox_input%' 
               GROUP BY candy_vendor 
               HAVING timeadded = MAX(timeadded)
               ORDER BY candy_vendor ASC";
$result=mysql_query($sql);

见:http://www.techonthenet.com/sql/having.php

不幸的是,从这四列中无法得知哪条记录是最近的。

我建议通过ALTER TABLE命令添加date_time列。如果您需要语法帮助,可以参考http://dev.mysql.com/doc/refman/5.1/en/alter-table.html。

这不会帮助你当前的查询,但它会帮助任何未来的查询。

按create_date (ORDER by)或任何创建时间戳排序数据,然后执行SELECT * FROM table LIMIT 1;#检索第一行