Mysql
 sql >> Base de données >  >> RDS >> Mysql

Joindre des lignes en tant que tableau d'une autre table pour chaque ligne

Je pense que vous avez besoin de mysql GROUP_CONCAT

Faites quelque chose comme ceci :-

SELECT 
    movies.*, 
    group_concat(links.link ', ') as links
FROM movies 
LEFT JOIN links 
ON links.movieid = movies.movieid 
GROUP BY movies.movieid

Vous obtiendrez une liste de liens séparés par des virgules pour chaque film. Que vous pouvez extraire comme ceci :-

foreach ($movies->result() as $row) {
  $linksArray = explode(",",$row->links);
}

Mises à jour Je pense que c'est la seule façon d'obtenir les résultats sans avoir plusieurs lignes de résultats pour un seul film avec plusieurs liens.

Faites juste attention à la longueur maximale de caractères que vous pouvez obtenir dans le résultat - par défaut 1024 caractères. Lisez ceciMysql group_concat_max_length et Longueur maximale de la concat de groupe pour savoir comment outrepasser la limite.

Et comme Dan Grossman l'a souligné, si vous pensez que les liens peuvent contenir des virgules, utilisez un délimiteur différent ou inhabituel.