Ich habe 3 Tabellen nämlich - celebs
, celeb_roles
, celeb_industry
.
celebs
ist die Haupttabelle mit einer zu vielen Beziehung mit anderen 2 Tabellen.Codezeichner Getting eins zu viele Beziehung von Modell und Analyse in Sicht
celebs
hat die Spalten - ID, Name, Nationalität, Status.
celebs_roles
hat die Spalten - id, celeb_id, role_id.
celebs_industry
hat die Spalten - id, celeb_id, industry_id.
Es gibt begrenzte und feste Anzahl von Rollen und Industrie. Also habe ich sie in eine Konfigurationsdatei mit id=>value
Paar gelegt. Also, wenn ich role_id
von Ergebnis bekomme, kann ich den Wert aus der Konfigurationsdatei nehmen. Gleiches gilt für industry_id
.
Jetzt für einen Promi Details von einer bestimmten ID erhalten, habe ich die Abfrage wie unten im Modell geschrieben.
public function getCelebSingle($celebId)
{
$this->db->select('*');
$this->db->from('celebs');
$this->db->join('celebs_roles', 'celebs_roles.celeb_id = celebs.id');
$this->db->join('celebs_industry', 'celebs_industry.celeb_id = celebs.id');
$this->db->where('celebs_roles.celeb_id', $celebId);
$this->db->where('celebs_industry.celeb_id', $celebId);
$query = $this->db->get();
return $query->result_array();
}
In der Datenbank gibt es einen Datensatz in celebs
, mit dem gleichen celeb_id mit 2 Datensätze in jedem anderen 2 Tabellen. Das Ergebnis, das ich bekam, ist unten.
Array
(
[0] => Array
(
[id] => 1
[name] => new test
[nationality] => whatever
[status] => Pending
[celeb_id] => 1
[role_id] => 1
[industry_id] => 1
)
[1] => Array
(
[id] => 1
[name] => new test
[nationality] => whatever
[status] => Pending
[celeb_id] => 1
[role_id] => 3
[industry_id] => 1
)
[2] => Array
(
[id] => 2
[name] => new test
[nationality] => whatever
[status] => Pending
[celeb_id] => 1
[role_id] => 1
[industry_id] => 2
)
[3] => Array
(
[id] => 2
[name] => new test
[nationality] => whatever
[status] => Pending
[celeb_id] => 1
[role_id] => 3
[industry_id] => 2
)
)
Also für nur einen Datensatz von celebs
Tabelle, muss ich dies in einer Schleife setzen, was meiner Meinung nach ein bisschen Überlastung ist. Wenn die Anzahl der Datensätze in anderen 2 Tabellen ansteigt, werden auch die Elemente im Ergebnis-Array erhöht. Also frage ich mich, kann ich das Ergebnis so etwas wie unten bekommen?
Array
(
[0] => Array
(
[id] => 1
[name] => new test
[nationality] => whatever
[status] => Pending
[celeb_roles] => array(
[0] => Array
(
[id] => 1
[celeb_id] => 1
[role_id] => 1
)
[0] => Array
(
[id] => 1
[celeb_id] => 1
[role_id] => 2
)
)
[celeb_industry] => array(
[0] => Array
(
[id] => 1
[celeb_id] => 1
[industry_id] => 1
)
[0] => Array
(
[id] => 1
[celeb_id] => 1
[industry_id] => 2
)
)
)
)
Dies ist nur eine Erwartung aus dem Ergebnis-Array, aber ich weiß nicht, wie dieses resultierende Array zu erreichen. Kann jemand es sich ansehen?
Hier ist ein mögliches Duplikat - Codeigniter group by and create multidimensional array. Aber die Antwort ist nicht wirklich befriedigend. Die Antworten geben eindeutig an, JOIN nicht zu verwenden, sondern normale codeigniter Abfrage zu verwenden, was meiner Meinung nach 3 Abfragen für die Frage ergeben wird. Was passiert, wenn ich alle Datensätze der Tabelle celebs
auswähle? Dann ist die Anzahl der Abfragen 3 * Number of records in celebs table
, die überladen wird. Wenn es keinen anderen Weg gibt, muss ich es nur so machen, aber ich hoffe, es wird bessere Wege geben, dies zu tun.
möglich Duplikat: http://stackoverflow.com/questions/18745345/codeigniter-group-by-and-create-multidimensional-array – Sebastianb