代码之家  ›  专栏  ›  技术社区  ›  Jithin Vijayan

与php和mysql一对多关系中的分页

  •  1
  • Jithin Vijayan  · 技术社区  · 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?    |
    ------------------------- 
    

    我使用的是php和mysql5.7。

    2 回复  |  直到 6 年前
        1
  •  1
  •   antoine.lange    6 年前

        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
  •  0
  •   Jithin Vijayan    6 年前

    最后,我找到了这个问题的答案。

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

    如果你有另一个简单的选择。请在这里张贴。