0

有没有这样做的好方法。

基本上我有一百行,我按升序排序以找到最不受欢迎的。如果至少不是唯一的,我显然关心子集的大小 - 具有相等“流行”(人气排名)的行数。为了确定这个子集的大小,我有以下代码。

然而,作为一个新手,我意识到这似乎有点笨拙。

$leastpop = mysql_query(" SELECT * FROM homepage ORDER BY pop ASC   LIMIT 1 ");

$pop = mysql_fetch_array($leastpop); 

$check = mysql_query("SELECT * FROM homepage WHERE pop = '$pop'");  

$count = mysql_num_rows($check);

if($count>=1)
{
//find the element with the corresponding "oldest date"



}

就目前而言,如果该子集的大小被证明大于一个,我什至没有尝试确定子集中的“最旧日期”,因为害怕重复相同的笨拙查询。

有没有更好更有效的方法来解决这个问题?我希望我已经足够清楚了。干杯。

4

4 回答 4

0

也许尝试按照这些方式进行查询会有所帮助:

select pop, count(*), min(date_field) from homepage group by pop order by pop ASC limit 1;

这将为您提供最不受欢迎的流行音乐,其中包含该流行音乐的行数和最早的日期(最小日期)。这些函数称为聚合函数,因为它们就是这样做的。

于 2012-12-15T13:38:05.730 回答
0

如果可能,不要再使用mysql_*新代码,去mysqliPDO.

 SELECT h1.* FROM homepage h1
 LEFT JOIN homepage h2
 ON h2.pop <= h1.pop AND h2.date_column <= h1.date_column
 WHERE h2.id IS NULL;
于 2012-12-15T13:42:36.373 回答
0

假设您想要最旧的日期最不受欢迎,您只需要一个(简单...)查询:

SELECT * FROM homepage ORDER BY pop, insert_date LIMIT 1

如果有多个记录匹配相同的条件,mysql 只会给你它找到的第一个。如果这还不够具体,您将不得不添加更多标准;使用WHERE或向ORDER BY子句添加更多字段。

如前所述,这些mysql_*功能已被弃用,因此您应该切换到 PDO 或 mysqli。

于 2012-12-15T13:50:28.320 回答
0

您还可以使用子查询:

$check = mysql_query("SELECT * FROM homepage WHERE pop IN (SELECT h2.pop FROM homepage AS h2 ORDER BY h2.pop ASC LIMIT 1)");
于 2012-12-15T13:51:01.373 回答