2012-02-06 19 views
6

ok, trochę tła,SQL dołączyć wyniki do obiektu w CodeIgniter

  • tylko do CodeIgniter
  • nie jest fanem skryptów SQL i po stronie serwera
  • wiem, co łączy się
  • Mam po raz pierwszy bazę danych wiele-do-wielu

dzieje się tak dlatego, że w wyniku łączenia zwykle występuje następujący przykład. ale chciałem parsować to bez budowania kodu, aby zignorować powtórzenia. to próbka łącząca 3-tabelowe. kwestia powtarzających wartości zwiększa się dołączę kolejne tabele:

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 

czy istnieje sposób w CodeIgniter (lub zwykłego PHP), które mogę dostać tę formę tablicy i przekształcić go w coś takiego json (i przetwarza go jak 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'] 
    } 
] 

Aktualizacja: to nie ogranicza się do tej głębokości obiektów/tablice (jak w przykładzie). może pójść głębiej (tablice w tablicach, tablice w obiektach, obiekty w tablicach, obiekty w obiektach)

Odpowiedz

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

Właśnie tego potrzebowałem. dzięki! – Joseph

+0

Cieszę się, że mogłem pomóc. –

Powiązane problemy