it-mot-dan-vi.com

Hai bên trái tham gia vào một truy vấn vào cơ sở dữ liệu Joomla

Tôi có hai bảng: #__records và #__parents. Trong bảng đầu tiên, một số bản ghi có thể có các bản ghi cha được lưu trong cùng một bảng nhưng quan hệ giữa trẻ và cha mẹ được lưu trong bảng thứ hai. Ví dụ

#__ hồ sơ :

id  name
1   Child1
2   Child2
3   Parent1

#__ cha mẹ

id  child parent
1     2    3
2     1    3

Bây giờ tôi có truy vấn:

$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('a.id, a.name')
    ->from('#__records as a');
$query->select('b.parent as parentid');
$query->join('LEFT', '#__parents AS b ON b.child = a.id');
$db->setQuery($query);
return $query;

Nó trả về tên của các bản ghi (a.name) nhưng với ID của cha mẹ (b.parent). Tôi cần "tham gia trái" thứ hai hoặc cách khác để có được tên của cha mẹ thay vì ID của họ. Cái gì đó như:

select c.name as parentname from #__records as c where c.id=b.parent
5
stckvrw
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('a.id, a.name, c.id as parent_id, c.name as parent_name')
    ->from('#__records as a');
$query->select('b.parent as parentid');
$query->join('LEFT', '#__parents AS b ON b.child = a.id');
$query->join('LEFT', '#__records AS c ON b.parent = c.id');
$db->setQuery($query);
return $query;

Bạn chắc chắn có thể làm nhiều tham gia trái. Chỉ cần đặt bí danh cho một bí danh khác ('c' trong trường hợp này) và sau đó chọn cũng là bí danh cho các cột mà chúng không giống với những gì bạn đang kéo cho trẻ.

8
David Fritsch

nếu bạn cần thực hiện các kết nối "nhiều đến nhiều" thì tốt hơn là bắt bảng A và B thành php và sau đó thực hiện các toán tử, nhưng nếu bạn chỉ cần nếu bảng A liên quan đến C dựa trên bảng B thì câu trả lời trên là tốt; )

0
Lanah