2012-02-06 9 views
6

bien, un poco de historia,SQL unirse resultados en un objeto en CodeIgniter

  • solo en CodeIgniter
  • no es un fan de secuencias de comandos SQL y del lado del servidor
  • Yo sé lo que se une son
  • tengo una base de datos muchos-a-muchos por primera vez

es porque las uniones generalmente tienen el siguiente ejemplo como resultado. pero quería analizar esto sin tener que crear código para ignorar las repeticiones. es una muestra de combinación de 3 tablas. el tema de los valores que se repiten aumenta a medida que me uno más tablas:

table1.authorid table1.authorname table2.books  table3.favorited 
     1     john   john's book 1  jean 
     1     john   john's book 1  joe 
     1     john   john's book 2  ken 
     1     john   john's book 2  mark 
     2     mark   mark's book 1  alice 
     2     mark   mark's book 1  ted 
     2     mark   mark's book 2  sarah 
     2     mark   mark's book 2  denise 

hay una manera en CodeIgniter (o PHP plano) que yo pueda obtener esta forma array y convertirlo en algo así como JSON (y analizarlo como JSON)

$result = [ 
    { 
     'authorid':1, 
     'authorname':'john', 
     'books':['john's book1','john's book2'], 
     'favorited':['jean','joe','ken','mark'] 
    }, 
    { 
     'authorid':2, 
     'authorname':'mark', 
     'books':['mark's book1','mark's book2'], 
     'favorited':['alice','ted','sarah','denise'] 
    } 
] 

actualización: esto no se limita a esta profundidad de los objetos/arrays (como en el ejemplo). puede ir más profundo (matrices en matrices, matrices en objetos, objetos en matrices, objetos en objetos)

Respuesta

7
// first, we need the SQL results in the $result_array variable 
$sql = 'SELECT ...'; // your SQL command 
$result_array = $this->db->query($sql)->result_array(); // codeigniter code 

// here the real answer begins 
$result = array(); 

foreach ($result_array as $row) 
{ 
    if (!isset($result[$row['authorid']]) 
    { 
     $author = new StdClass(); 
     $author->authorid = $row['authorid']; 
     $author->authorname = $row['authorname']; 
     $author->books = array($row['books']); 
     $author->favorited = array($row['favorited']); 
     $result[$row['authorid']] = $author; 
    } 
    else 
    { 
     if (!in_array($row['books'], $result[$row['authorid']]->books)) 
     { 
      $result[$row['authorid']]->books[] = $row['books']; 
     } 
     if (!in_array($row['favorited'], $result[$row['authorid']]->favorited)) 
     { 
      $result[$row['authorid']]->favorited[] = $row['favorited']; 
     } 
    } 
} 

$result = array_values($result); 
echo json_encode($result); 
+0

justo lo que necesitaba. ¡Gracias! – Joseph

+0

Estoy feliz de poder ayudar. –

Cuestiones relacionadas