分發記錄我有一個表存儲競爭條目。 參賽者必須輸入文字並可以選擇上傳照片如何根據列
當我在頁面上顯示條目時,我一次對9個分頁。
如何儘可能確保每個頁面至少包含一張帶有照片的條目(假設每頁有足夠的照片條目)?或許,這將是足夠的分發帶有照片的條目之間均勻
分發記錄我有一個表存儲競爭條目。 參賽者必須輸入文字並可以選擇上傳照片如何根據列
當我在頁面上顯示條目時,我一次對9個分頁。
如何儘可能確保每個頁面至少包含一張帶有照片的條目(假設每頁有足夠的照片條目)?或許,這將是足夠的分發帶有照片的條目之間均勻
這是我最近看到的一個更具挑戰性的問題 - 謝謝!我無法使用單個SQL語句使其工作,但我能夠像這樣使其工作(至少看起來如此)。基本上,它會嘗試確定將返回多少結果,然後有多少人擁有照片,並使用一定比例的照片除以頁數(使用CEILING確保前幾頁至少有一張)。
總之,這裏有雲:
SET @page = 1;
SET @resultsPerPage = 9;
SELECT @recCount:= COUNT(Id) as RecCount
FROM Entries;
SELECT @photoCount:= COUNT(Photo) as PhotoCount
FROM Entries
WHERE Photo IS NOT NULL;
SET @pageCount = CEILING(@recCount/@resultsPerPage);
SET @photosPerPage = CEILING(@photoCount/@pageCount);
SET @nonPhotosPerPage = @resultsPerPage - CEILING(@photosPerPage);
SELECT *
FROM (
SELECT *,
@rownum := @rownum + 1 row_number
FROM Entries JOIN (SELECT @rownum := 0) r
WHERE Photo IS NOT NULL
) a
WHERE a.row_number > (@photosPerPage*(@page-1))
and a.row_number <= (@photosPerPage*(@page))
UNION
SELECT *
FROM (
SELECT *,
@rownum2 := @rownum2 + 1 row_number
FROM Entries JOIN (SELECT @rownum2 := 0) r
WHERE Photo IS NULL
) b
WHERE b.row_number > (@nonPhotosPerPage*(@page-1))
and b.row_number <= (@nonPhotosPerPage*(@page))
而且SQL Fiddle。
祝你好運!
頁我建議你隨機的行排序:
order by rand()
這並不能保證每個頁面上的照片,但它幫助。
另一種方法是做這樣的事情:通過SEQNUM
select *, @seqnum:[email protected]+1
from t
where nophoto
select *, @seqnum:[email protected]+8
from t
where photo
然後排序。這種麻煩的處理方式是處理每頁少於一張照片和多張照片的情況。隨機方法可能就足夠了。
我不知道這會有什麼幫助,因爲沒有理由爲什麼它贏了;無論如何t是一個隨機分佈 - 它不是像照片記錄分組 – Mark
你並不關心顯示順序,只是照片均勻分佈,對不對? – Strawberry
正確 - 最好按照提交的順序,但不是很重要 – Mark
嗯,棘手..... – Strawberry