sql >> Databasteknik >  >> RDS >> Mysql

Sammanfoga rader som array från en annan tabell för varje rad

Jag tror att du behöver mysqls GROUP_CONCAT

Gör något så här:-

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

Du kommer att få en kommaseparerad lista med länkar för varje film. Som du kan extrahera så här:-

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

Uppdateringar Jag tror att detta är det enda sättet du kan få resultaten utan att ha flera resultatrader för en enda film med flera länkar.

Var bara försiktig med den maximala längden på tecken du kan få i resultatet - som standard 1024 tecken. Läs dettaMysql group_concat_max_length och Grupp konkat maxlängd för att veta hur man överskrider gränsen.

Och som Dan Grossman har påpekat, om du känner att länkarna kan innehålla kommatecken, använd en annan eller ovanlig avgränsare.



  1. Ansluta till Docker MySQL-behållare från localhost?

  2. Itererar över heltal[] i PL/pgSQL

  3. Hur man löser oförmögen att byta kodningsfel när XML infogas i SQL Server

  4. MYSQL extraherar json-element där json innehåller