2012-09-13 135 views
0

我有此代码哪些匹配在MySQL的视图称为vAlbums此返回查询的JSON阵列导致PDO查询另一个PDO查询

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 

谢谢

回答

1

为什么不在一个查询中做一个连接和组concat?

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) 
+0

这是一个好主意,我想看看如果PHP/PDO路由将泛滥,如果可能的话,谢谢@Fluffeh –

+0

刚试过这个,真棒谢谢 –