1

クライアント用の単純な URL ローテーターを作成していますが、以前に表示された最も古いものに従って URL をローテーションさせたいと考えています。

私のコラムはとてもシンプルです:

url_id | company_id | url | last_clicked

company_idが渡され、last_clicked が に一致するすべてのレコードの最小値である単一の行をフェッチしたいcompany_id

url_idすべての last_clicked 値が空の場合もランダムに選択する必要があります。

GROUP BYこれはandで達成できるとHAVING思いますが、クエリから何かを返すことができないようです。

私はこれを持っています:

$last = $this->db->fetchOne ("SELECT url_id FROM 
        {$this->prefix}urls GROUP BY company_id HAVING MIN(last_clicked) 
        WHERE company_id='$company'");
4

2 に答える 2

0

これは、last_clicked が最小の行を取得するか、すべて NULL の場合はランダムに取得します。

SELECT url_id FROM urls 
    WHERE company_id = $company
    ORDER BY last_clicked, RANDOM() LIMIT 1;

company_idおよびに基づくインデックスは、次のlast_clicked場合に非常に役立ちます。

CREATE INDEX urls_ndx ON urls(company_id, last_clicked);
于 2012-08-30T20:29:12.083 に答える
-1
SELECT url_id FROM 
TABLE
WHERE company_id='$company'
 AND last_clicked = ( SELECT MIN(last_clicked)
                      FROM TABLE WHERE company_id='$company' )
于 2012-08-30T19:51:43.367 に答える