클라이언트에 대한 간단한 URL 회전기를 작성 중이며 이전에 표시된 가장 오래된 URL에 따라 URL을 회전 시키길 원합니다.하나의 열이 최소 인 행을 선택하십시오.
url_id | company_id | url | last_clicked
내가 company_id
가 전달되는 단일 행을 인출 할과 last_clicked는 company_id
일치하는 모든 레코드의 최소 :
내 열은 매우 간단합니다.
모든 last_clicked 값이 비어 있으면 임의의 url_id
도 선택해야합니다.
GROUP BY
및 HAVING
으로 수행 할 수 있다고 가정하지만 아무 것도 반환하지 않을 수 있습니다.
SELECT url_id FROM urls
WHERE company_id = $company
ORDER BY last_clicked, RANDOM() LIMIT 1;
인덱스 company_id
에 기초 :
$last = $this->db->fetchOne ("SELECT url_id FROM
{$this->prefix}urls GROUP BY company_id HAVING MIN(last_clicked)
WHERE company_id='$company'");
당신은 [SQL 탈출] (http://bobby-tables.com/php)을하고 있습니까? 아니면이 값들이 완전히 안전하기를 바랍니까? – tadman
그것은 모두 db 클래스에서 이스케이프 처리됩니다 .-) –
'?'또는': company'와 같은 자리 표시자를 실제로 사용해야하므로 이스케이프 처리에 대한 의문의 여지가 없습니다. 우연히 이들 중 하나를 놓친 경우 [자동 취약점 테스트 도구] (http://sqlmap.org/)를 사용하여 크게 열 수 있습니다. 문자열 보간은 본질적으로 위험합니다. – tadman