Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用一个查询从两个SQL表分页。最快的方式_Php_Jquery_Mysql_Sql - Fatal编程技术网

Php 使用一个查询从两个SQL表分页。最快的方式

Php 使用一个查询从两个SQL表分页。最快的方式,php,jquery,mysql,sql,Php,Jquery,Mysql,Sql,我有一个简单的数据库: Table 1: Object Table 2: Data id | type | added object_id | key | value ------------------------ ----------------------------- 1 | app | 2017 1 | name | ...

我有一个简单的数据库:

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


考虑使用字符串比较,比如代替=

这给我一个数组,其中每个数据行都有一个对象id和一个对象创建=数组([0]=>array([id]=>2[type]=>app[key]=>2[name]=>…[1]=>array([id]=>2[type]=>app[key]=>2[lang]=>)这不是我想要的。我将只限制对象id的打印,比如“应用程序(id为1)的名称和日期来自开发人员devu name”-“应用程序(id为2)的名称和日期来自开发人员devu name”我不理解这个问题。可能,您需要子查询。您可能还需要这个。
SELECT Distinct(object.id), object.type, .... FROM object inner join data on data.id_object=object.id WHERE object.type = 'app'  LIMIT 5