php - 来自另一个 PDO 查询结果的 PDO 查询

标签 php mysql json pdo

我有这段代码,它会点击 mysql 中名为 vAlbums 的 View ,该 View 返回查询结果的 JSON 数组

function getAlbumPics($arno){
    $aSql = "SELECT albu_ablumid, albu_name_en, albu_name_de, albu_name_fr, albu_name_nl, albu_name_es, albu_name_it, albu_photourl FROM vAlbums WHERE site_arno=:arno";
    try {
        $db = getConnection();
        $aStmt = $db->prepare($aSql);
        $aStmt->bindParam(":arno",$arno);
        $aStmt->execute();
        $albums = $aStmt->fetchAll(PDO::FETCH_OBJ);
        $arrAID = $aStmt->fetchColumn(2);
        $db = null;
        echo '{"albums": ' . json_encode($albums) . '}';
    } catch(PDOException $e) {
        echo '{"error":[{"text":"'. $e->getMessage() .'"}],';
        echo '"SQL": ' . json_encode($aSql) .'}';
    }
}

我需要执行一个子查询,将照片数组放入数组中的每个相册中,如下所示

{
    "albums": [
        {
            "albu_ablumid": "1",
            "photos": [
                {
                    "photourl": "photo1"
                },
                {
                    "photourl": "photo2"
                },
                {
                    "photourl": "photo3"
                }
            ]
        },
        {
            "albu_ablumid": "2",
            "photos": [
                {
                    "photourl": "photo1"
                },
                {
                    "photourl": "photo2"
                },
                {
                    "photourl": "photo3"
                }
            ]
        }
    ]
}

有人可以展示如何实现 MySQL 照片查询:

SELECT * FROM photos WHERE album_id = x

谢谢

最佳答案

为什么不在单个查询中执行连接和分组连接?

SELECT 
    albu_ablumid, 
    albu_name_en, 
    albu_name_de, 
    albu_name_fr, 
    albu_name_nl, 
    albu_name_es, 
    albu_name_it, 
    albu_photourl,
    group_concat(photourl) // Guessing at column Name
FROM 
    vAlbums a
        join photos b
            on a.albu_ablumid=b.album_id
WHERE 
    site_arno=:arno
group by
    albu_ablumid, 
    albu_name_en, 
    albu_name_de, 
    albu_name_fr, 
    albu_name_nl, 
    albu_name_es, 
    albu_name_it, 
    albu_photourl

这将返回与相册匹配的每行中以逗号分隔的字符串形式的所有照片。然后,您可以根据代码中的需要轻松地将其拆分。它节省了大量的连接和运行的多个查询。

这是我的播放数据库中的一个小示例,用于展示它的功能:

mysql> select * from table1;
+---------+------+------+-------------+
| autonum | ID   | name | metavalue   |
+---------+------+------+-------------+
|       1 |    1 | Rose | Drinker     |
|       2 |    1 | Rose | Nice Person |
|       3 |    1 | Rose | Runner      |
|       4 |    2 | Gary | Player      |
|       5 |    2 | Gary | Funny       |
|       6 |    2 | Gary | NULL        |
|       7 |    2 | Gary | Smelly      |
+---------+------+------+-------------+
7 rows in set (0.00 sec)

mysql> select ID, group_concat(metavalue) from table1 group by ID;
+------+----------------------------+
| ID   | group_concat(metavalue)    |
+------+----------------------------+
|    1 | Drinker,Nice Person,Runner |
|    2 | Player,Funny,Smelly        |
+------+----------------------------+
2 rows in set (0.00 sec)

如果出于某种原因需要的话,可以使用一些简单的代码来处理 NULL:

mysql> select ID, group_concat(coalesce(metavalue,'Empty')) from table1 group by ID;
+------+-------------------------------------------+
| ID   | group_concat(coalesce(metavalue,'Empty')) |
+------+-------------------------------------------+
|    1 | Drinker,Nice Person,Runner                |
|    2 | Player,Funny,Empty,Smelly                 |
+------+-------------------------------------------+
2 rows in set (0.00 sec)

关于php - 来自另一个 PDO 查询结果的 PDO 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12405071/

相关文章:

java - 类属性的多种类型

php - 使用分页计算php中的并列排名

javascript - 如何将变量传递给 bootstrap 模式表单并运行 mysql 查询

php - 从 View 调用 Controller 方法

php - MYSQL查询开始时间和结束时间

在 tableView 中填充多个部分和行的 JSON 响应

php - 如何获取自定义帖子类型附件的文件名和文件大小

mysql - 使用 Ignited-Datatables 搜索时操作 'like' 的排序规则的非法混合

mysql - 无法弄清楚为什么每个查询都返回 else (情况时)

javascript - Ember JS 模板不渲染模型值