[英]Pagination in one to many relationship with PHP and MySQL
我想顯示數據庫表中的6條記錄。 2個表之間存在一對多關系。 使用自定義映射器,我將這些記錄映射如下。
$result = [
0=>[
"name"=>"jithin",
"phone"=>"907856",
"messages"=>[
0=>[
"title"=>"text messgae"
],
1=>[
"title"=>"Data messgae"
]
]
],
1=>[
"name"=>"Rijin",
"phone"=>"90247856",
"messages"=>[
0=>[
"title"=>"text messgae"
],
1=>[
"title"=>"Data messgae"
]
]
]
]
QUERY
"SELECT u.* , m.* FROM user u INNER JOIN messages m ON m.userId = u.id
WHERE m.date BETWEEN "12-12-2015" AND "12-12-2018" LIMIT 0, 6;
該查詢將返回如下數據
userId | name | messages|
-------|------|---------|
1 |jithin| hai |
1 |jithin| hello |
1 |jithin| Why? |
2 |Rijin | hai |
2 |Rijin | Where |
2 |Rijin | Why? |
-------------------------
但是我需要另外4個人的另外4條記錄。 我正在使用php和mysql5.7。
如果我了解您的需求:
SELECT u.id, u.userName , m.message
FROM user u
INNER JOIN messages m ON m.userId = u.id
INNER JOIN (SELECT u.id as user_id FROM user u LIMIT 0, 6) as users
ON users.user_id = u.id
WHERE m.date BETWEEN '12-12-2015' AND '12-12-2018';
最后,我找到了這個問題的答案。
"SELECT u.* , m.* FROM user u
INNER JOIN messages m ON m.userId = u.id
INNER JOIN (SELECT DISTINCT u.id as user_id FROM user u
INNER JOIN messages m ON m.userId = u.id
WHERE m.date BETWEEN "12-12-2015"
AND "12-12-2018" LIMIT 0, 6)
AS distinct_users ON distinct_users.user_id=u.id
WHERE m.date BETWEEN "12-12-2015" AND "12-12-2018";
這將返回准確的6個人消息,我們可以輕松管理分頁。 如果您還有另一個簡單的選擇。 請在這里發布。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.