【问题标题】:Pagination in one to many relationship with PHP and MySQL与 PHP 和 MySQL 的一对多关系中的分页
【发布时间】:2018-12-07 22:52:18
【问题描述】:

我想显示数据库表中的 6 条记录。 两个表之间存在一对多的关系。使用自定义映射器,我将这些记录映射如下。

$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"
                         ]
                    ]
      ]
]

查询

"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。

【问题讨论】:

  • 你能显示你的数据集中有什么,你想要什么结果吗?
  • 我需要 6 个人记录。两个表用户和消息。 user表包含userId、userName、phoneNumber字段,messages表包含userId(外键)、messageId、message
  • 此查询返回 6 条记录,但其中包含一对多关系。因此我无法管理分页。
  • 我需要 6 个人记录。两个表用户和消息。 user 表包含 userId, userName, phoneNumber fields,messages 表包含 userId(foreign key), messageId, message

标签: php mysql database pagination one-to-many


【解决方案1】:

如果我了解您的需求:

    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';

【讨论】:

  • 是的。我已经写了这个答案。感谢您的支持。如果您能找到解决此问题的其他方法,请在此处发布
【解决方案2】:

我终于找到了这个问题的答案。

"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 人消息,我们可以轻松管理分页。 如果你有另一个简单的选择。请在这里发帖。

【讨论】:

    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2015-11-25
    • 1970-01-01
    • 2015-04-23
    • 2013-07-01
    • 1970-01-01
    相关资源
    最近更新 更多