0

これを行う良い方法はありますか。

基本的に私は100行あり、最も人気のないものを見つけるために昇順で並べています。少なくとも一意でない場合、サブセットのサイズ、つまり「ポップ」(人気ランキング)が等しい行の数に明らかに関心があります。このサブセットのサイズを決定するために、次のコードがあります。

ただ、初心者なので少しぎこちなく見えるのは承知しております。

$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"



}

現状では、同じ不器用なクエリを繰り返すことを恐れて、このサブセットのサイズが1より大きいことが判明した場合、サブセット内の「最も古い日付」を特定しようとさえしていません。

この問題にアプローチするためのより良い効率的な方法はありますか? 私が十分に明確であることを願っています。乾杯。

4

4 に答える 4

0

最も古い日付で最も人気のないものが必要であると仮定すると、必要なクエリは1つだけです。

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 に答える
0

mysql_*可能であれば、新しいコードにはもう使用しないでmysqliくださいPDO

 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 pop, count(*), min(date_field) from homepage group by pop order by pop ASC limit 1;

これにより、最も人気のないポップが表示され、そのポップの行数と最も古い日付 (最小日付) が示されます。これらの関数は、まさにそれを行うため、集計関数と呼ばれます。

于 2012-12-15T13:38:05.730 に答える