GROUP BY, ORDER BY - 항목의 최신 모양을 고려하여 그룹을 만드는 방법
이 쿼리 (가독성을 위해 포맷 된 MySQL 5.X, PHP -)$query ="
SELECT
p.p_pid,
p.p_name,
p.p_url
FROM
activity a,
products p
WHERE
a.a_uid= ".$uid_int."
AND a.a_pid > 0
AND p.p_pid = a.a_pid
GROUP BY
a.a_pid
ORDER BY
a.a_time DESC LIMIT 6
");
일반적으로 사용자가 본 6 가지 최신 제품의 고유 목록을 생성해야합니다.
사용자가 제품을 두 번 이상 본 경우 문제가 발생합니다. 마지막 6 가지 활동 중 하나와 최근 6 가지 활동 이전의 활동 중 하나가 쿼리가 제품을 반환하지 않습니다. 나는 (그룹별로) 제품의 가장 최근 출시 시간과 함께 a_time을 떠나지 않는다고 가정합니다. 어떻게 해결할 수 있습니까?
감사를 궁금해! 왜 내가 p_name 등에 MAX를 필요로합니까? 이들은 문자열입니다. – Nir
처음 쓴 것처럼, a.a_pid의 그룹은 실제로 p의 그룹입니다. 따라서 그는 제품별로 그룹화하고 활동중인 마지막 6 개 제품을 찾고 싶어합니다. – Andomar
@Nir : 이것은 * 문자열이 아닙니다. 이들은 a.a_pid로 그룹화 된 * 문자열 그룹입니다. 그렇기 때문에 집계 함수를 사용하여 그룹의 한 문자열을 선택해야합니다. MySQL은 여기에 약간의 불편 함을 허용하지만 심지어 편리한 것처럼 보이는 집계 함수를 사용하지 않는 경우에도 문제가 발생했습니다. – Tomalak