簡體   English   中英

使用一個查詢從兩個 SQL 表中分頁。 最快的方式

[英]Pagination from two SQL Tables with one query. Fastest Way

我有一個簡單的數據庫:

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

有沒有更好的辦法? 因為這是一個非常糟糕的解決方案,我只想查詢一次我得到這樣的獲取數組:

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] => ...
...

一個查詢:

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 而不是 =

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM