我的查詢中似乎有一個錯誤,當我增加 OFFSET 值時會導致結果重復。它應該每頁顯示 20 個結果。只有 3 個結果與我的查詢匹配,但由于某種原因,其中一些結果會重復出現,即使它們應該只出現在查詢結果的第一頁上(例如,請參見下文)。
SELECT all_users_subbed_to.*,
(SELECT COUNT(*)
FROM subscribers s2
WHERE
s2.publisher_id = all_users_subbed_to.publisher_id)
AS subscribers_sub_count
FROM
(SELECT publisher_id,
subscriber_id, u2.username AS username,
u2.user_photo AS user_photo
FROM subscribers s
INNER JOIN users u
ON (u.id = s.subscriber_id)
INNER JOIN users u2
ON (u2.id = s.publisher_id)
WHERE subscriber_id = 80
)
AS all_users_subbed_to
ORDER BY subscribers_sub_count
DESC
LIMIT 20
OFFSET 1;
這個查詢的結果是......
| publisher_id | subscriber_id | username | user_photo | subscribers_sub_count |
| 88 | 80 | GERPAL1 | pic.png | 3 |
| 84 | 80 | PURPle | pic2.png | 2 |
| 87 | 80 | Zeeple | pic3.png | 1 |
如果我使 OFFSET = 2 即OFFSET 2 結果是......
這個查詢的結果是
| publisher_id | subscriber_id | username | user_photo | subscribers_sub_count |
| 84 | 80 | PURPle | pic2.png | 2 |
| 87 | 80 | Zeeple | pic3.png | 1 |
...即使這些結果只應在偏移量 = 1 時出現。
如果我使 OFFSET = 3 即OFFSET 3 結果是......
| publisher_id | subscriber_id | username | user_photo | subscribers_sub_count |
| 87 | 80 | Zeeple | pic3.png | 1 |
...即使這些結果只應在偏移量 = 1 時出現。
關于如何解決這種奇怪行為的任何想法?如果沒有,您是否在我的查詢中看到任何錯誤?
附加資訊 ...
用戶表
| id | username | user_photo |
| 80 | supercookie| userpic.png|
| 88 | GERPAL1 | pic.png |
| 84 | PURPle | pic2.png |
| 87 | Zeeple | pic3.png |
訂戶表
| id | publisher_id | subscriber_id |
| 1 | 88 | 80 |
| 2 | 88 | 84 |
| 3 | 88 | 87 |
| 4 | 84 | 80 |
| 5 | 84 | 88 |
| 6 | 87 | 80 |
uj5u.com熱心網友回復:
根據PostgreSQL 檔案偏移的意思OFFSET says to skip that many rows before beginning to return rows。
在您的查詢中,您添加LIMIT 20 OFFSET 2這意味著從 20 個現有行中跳過 2 行,并且已跳過兩個前行并顯示上一頁的重復行。
您應該使用此公式計算限制和偏移量:
LIMIT total_record_show OFFSET total_record_show * (page_number - 1)
--- page 1 (total_record_show: 20, page_number: 1)
LIMIT 20 OFFSET 0
--- page 2 (total_record_show: 20, page_number: 2)
LIMIT 20 OFFSET 20
--- page 3 (total_record_show: 20, page_number: 3)
LIMIT 20 OFFSET 40
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408056.html
標籤:
上一篇:加入陣列postgres
