2010-08-22 7 views
0
$data = mysql_query("SELECT * FROM phpbb_posts ORDER BY post_id DESC LIMIT 4") 
or die(mysql_error()); 

위 코드는 내 한계 부분에 문제가 있습니다. 내가 먼저 설정하면
은, 모든 , 완벽한 듯 보이지만 나는 코드가 정확히에도 불구하고, 몇 시간 후에 다시 와서 다시 페이지를 봐 및 기록다른 번호가를 표시 할 수 있었다 동일.MYSQL 일관성이 일치하지 않음

어떻게 해결할 수 있습니까?

+2

"다른 수의 레코드"란 무엇을 의미합니까? 얼마나? 삼? 5? 0? –

+3

나머지 코드를 확인해야합니다. 이 쿼리는 항상 4 개 이하의 결과를 반환합니다. 너의 문제는 여기에 없다. – Borealid

답변

3

마지막으로 페이지를 확인한 이후로 더 많은 게시물이 만들어지기 때문에 데이터가 다릅니다. post_id으로 주문하면 가장 높은 값이 가장 최근 게시물이됩니다.

이전 기록을 유지하는 가장 쉬운 방법은 데이터를 캐시하는 것입니다. 그러나 캐시는 캐시를 새로 고칠시기를 알아야합니다. 그렇지 않으면 변경되지 않습니다.

날짜/시간 열이있는 경우 LIMIT를 적용하기 전에 결과를 필터링 할 수 있습니다. 그러나 최소 4 개의 레코드를 확보하려면 충분히 넓어야합니다. 그리고보아야 할 날짜에 관한 동일한 문제 - 어떤 시점에서 그 날짜가 변경되거나 페이지가 제공하는 데이터가 절대로 바뀌지 않을 것입니다.

+0

MySQL에서 LIMIT은 항상 반환되는 레코드 수를 참조하지 않습니다? 왜 숫자가 아닌 어떤 레코드가 반환되는지를 결정하는 것을 제외하고는 정렬이 중요할까요? – Tahbaza

+1

@Tahbaza : 'LIMIT'은 질문과 관련이 없습니다. 문제는 끊임없이 데이터를 변경하는 것입니다. LIMIT는 4, 10, 100 등일 수 있으며 문제는 여전히 동일합니다. 모든 페이지를 새로 고치면 첫 번째 행은 이전과 같지 않습니다 (아무도 게시물을 작성하지 않는 한). –

+0

그가 지정하는 순서는 중요하지 않으며 결과 집합에는 항상 4 개의 행이 있습니다. 문제는 몇 줄 아래에 있어야합니다 (OP가 4 대신 5, 6, 3, 8 개의 결과를 얻는다고 가정). – Ben

0

반환되는 레코드 수를 지정하지 않습니다. LIMIT는 최대 4 개의 레코드를 반환해야하며 쿼리에서 반환되는 레코드가 4 개 이상이면 적은 수입니다. 4 개 이상의 레코드가 반환 된 경우 문제가 발생합니다.

관련 문제