Ich möchte eine Tabelle namens „Unternehmen“ mit der Tabelle „Benutzer“ verknüpfen, damit ich den Namen der Firma usw. erhalten kann, in der sich der Benutzer befindet. Ich habe das irgendwie erfolgreich gemacht:
Code: Select all
function get_profile_by_username($username)
{
$this->db->join('companies', $this->table_name . '.company_id = companies.id');
$this->db->where('LOWER(username)=', strtolower($username));
$query = $this->db->get($this->table_name);
if ($query->num_rows() == 1)
return $query->row();
return NULL;
}
Normalerweise würde ich beim Schreiben der Rohabfrage den Tabellen Aliase geben und das Ergebnis wäre etwa u.company_id, c.name. Ich wüsste also, dass name nichts mit dem Benutzer zu tun hat, sondern natürlich mit dem Namen des Unternehmens. Und obwohl dies jetzt, aber möglicherweise in der Zukunft kein Problem darstellt, kann die Spalte „id“ offensichtlich nicht in der Ergebnismenge koexistieren, sodass eine Spalte überschrieben wird!
Wie können wir diese Art der Unterscheidung zwischen den Feldern erreichen, die aus bestimmten Tabellen stammen? Oder gibt es eine bessere Möglichkeit, Tabellenverknüpfungen durchzuführen und mit verbundenen Abfragedatensätzen/-objekten zu arbeiten?
Bearbeiten:
Wenn ich es als Rohabfrage machen würde, würde ich Folgendes tun:
Code: Select all
SELECT u.id, u.username, c.name
FROM users AS u
JOIN companies AS c
ON c.id = u.company_id
WHERE u.username = 'foobar';
Mobile version