2012-09-13 3 views
0

je ce code qui frappe une vue dans une base MySQL appelé vAlbums ce retourne un tableau JSON de résultats de la requêteAOP Recherche de résultats d'une autre PDO de requête

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) .'}'; 
    } 
} 

je dois faire une requête secondaire pour placer un tableau de photos dans chaque album dans le tableau comme ainsi

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

quelqu'un peut-il montrer comment y parvenir la requête MySQL pour les photos est:

SELECT * FROM photos WHERE album_id = x 

Merci

Répondre

1

Pourquoi ne pas faire une jointure de groupe et de jointure dans une seule requête?

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 

Ceci retournera toutes les photos dans une chaîne séparée par des virgules dans chaque ligne correspondant à l'album. Vous pouvez ensuite le diviser facilement selon vos besoins dans votre code. Il enregistre beaucoup de connexions et plusieurs requêtes en cours d'exécution.

Voici un petit exemple de mon jeu db pour montrer comment il fonctionne:

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) 

et un code simple à prendre soin des NULLs si vous avez besoin pour une raison quelconque:

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

Ceci est une bonne idée que je voudrais voir si la route PHP/PDO va se dérouler et si c'est possible, merci @Fluffeh –

+0

Juste essayé ceci et merci génial –

Questions connexes