【问题标题】:Pagination from two SQL Tables with one query. Fastest Way使用一个查询从两个 SQL 表分页。最快的方式
【发布时间】:2017-11-01 12:52:08
【问题描述】:

我有一个简单的数据库:

Table 1: Object                    Table 2: Data
id | type | added                  object_id | key     | value
------------------------           -----------------------------
1  | app  | 2017                   1         | name     | ...
2  | app  | 2017                   2         | name     | ...
3  | win  | 2017                   2         | version  | ...
                                   2         | dev_name | ...
                                   2         | lang     | ...

我创建了一个简单的分页,仅显示类型应用程序中的 5 个对象及其数据表中的信息:

example code:
$sth = $dbh->prepare("SELECT * FROM object WHERE type = 'app' LIMIT 5");
$sth->execute;
$object = $sth->fetchAll(PDO::FETCH_ASSOC);

foreach($object as $rows) {
    $sth = $dbh->prepare("SELECT * FROM data WHERE id = $rows['id']");
    $sth->execute;
    $data = $sth->fetchAll(PDO::FETCH_ASSOC);

    echo $data['name'];
    echo $data['version'];
    echo $object['added'];
    ...

有没有更好的方法?因为这是一个非常糟糕的解决方案,所以我只想查询一次获得这样的 fetch 数组:

array(
       // app with id = 1 in object table
       [1] => array(
                     // data from the app with id = 1 in data table
                     [name] => ...
                     [version] => ...
                     [dev_name] => ...
                     [lang] => ...
       // app with id = 2 in object table
       [2] => array(
                     // data from the app with id = 2 in data table
                     [name] => ...
                     [version] => ...
                     [dev_name] => ...
                     [lang] => ...
...

【问题讨论】:

    标签: php jquery mysql sql


    【解决方案1】:

    一个查询:

    SELECT * FROM object inner join data on data.id_object=object.id WHERE object.type = 'app' LIMIT 5
    

    此查询从两个表中返回信息以及关联数据。 我想这就是你想要的

    如果你想按第一个表的 id 分组,你也可以执行这个查询

    SELECT * FROM object inner join data on data.id_object=object.id WHERE object.type = 'app' group by object.id LIMIT 5
    

    SELECT Distinct(object.id), object.type, .... FROM object inner join data on data.id_object=object.id WHERE object.type = 'app'  LIMIT 5
    

    考虑字符串比较使用 LIKE 而不是 =

    【讨论】:

    • 这给了我一个数组,其中每个数据行都有一个对象 id 和一个对象 create = array( [0] => array([id] => 2 [type] => app [key] => 2 [name] => ... [1] => array([id] => 2 [type] => app [key] => 2 [lang] => ... ) 这不是我想要。
    • 我只会限制对象 id 的打印输出,例如“app(id 为 1)具有 namedate 来自开发者 dev_name" - " app (id 2) 具有来自开发者的 namedate dev_name"
    • 我没有理解这个问题。可能,您需要子查询。另请参阅this,您可能需要。 stackoverflow.com/questions/28145064/sql-limit-by-id-column
    猜你喜欢
    • 2014-04-10
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多