2010-03-01 30 views
5

Tôi có ba bảng như thế này:Zend Framework: Làm thế nào để kết hợp ba bảng trong một truy vấn bằng cách sử dụng kết nối?

Person bảng:

person_id | name  | dob 
-------------------------------- 
    1  | Naveed | 1988 
    2  | Ali  | 1985 
    3  | Khan  | 1987 
    4  | Rizwan | 1984 

Địa chỉ bảng:

address_id | street | city | state | country 
---------------------------------------------------- 
    1  | MAJ Road | Karachi | Sindh | Pakistan 
    2  | ABC Road | Multan | Punjab | Pakistan 
    3  | XYZ Road | Riyadh | SA | SA 

bảng Person_Address:

person_id | address_id 
---------------------- 
    1  |  1 
    2  |  2 
    3  |  3 

Bây giờ tôi muốn để có được tất cả hồ sơ của bảng Person_Address mà còn với bản ghi người và địa chỉ của họ như thế này bằng một truy vấn:

person_id| name | dob | address_id | street | city | state | country 
---------------------------------------------------------------------------------- 
    1 | Naveed | 1988 | 1  | MAJ Road | Karachi | Sindh | Pakistan 
    2 | Ali | 1985 | 2  | ABC Road | Multan | Punjab | Pakistan 
    3 | Khan | 1987 | 3  | XYZ Road | Riyadh | SA | SA 

Làm thế nào để sử dụng zend? Cảm ơn

Trả lời

13

Hướng dẫn tham chiếu là điểm khởi đầu tốt nhất để tìm hiểu về Zend_Db_Select. Cùng với ví dụ của tôi dưới đây, tất nhiên:

//$db is an instance of Zend_Db_Adapter_Abstract 
$select = $db->select(); 
$select->from(array('p' => 'person'), array('person_id', 'name', 'dob')) 
     ->join(array('pa' => 'Person_Address'), 'pa.person_id = p.person_id', array()) 
     ->join(array('a' => 'Address'), 'a.address_id = pa.address_id', array('address_id', 'street', 'city', 'state', 'country')); 

Đó là sau đó đơn giản như này để lấy một vòng:

$db->fetchRow($select); 

Trong gỡ lỗi Zend_Db_Select có một thủ thuật thông minh bạn có thể sử dụng - chỉ cần in các đối tượng chọn , do đó, hãy gọi phương thức toString để tạo SQl:

echo $select; //prints SQL 
0

Tôi không chắc liệu bạn đang tìm kiếm SQL để thực hiện việc trên hay mã bằng cách sử dụng các tiện ích của Zend. Với sự hiện diện của "sql" và "tham gia" trong các thẻ, đây là SQL bạn cần:

SELECT p.person_id, p.name, p.dob, a.address_id, street, city, state, country 
FROM person p 
INNER JOIN Person_Address pa ON pa.person_id = p.person_id 
INNER JOIN Address a ON a.address_id = pa.address_id 

Gấu nhớ rằng Person_Address cho chúng ta biết rằng có một mối quan hệ nhiều-nhiều giữa một Person và một Địa chỉ. Nhiều người có thể chia sẻ địa chỉ và một người có thể có nhiều địa chỉ.

SQL ở trên sẽ hiển thị TẤT CẢ các mối quan hệ như vậy. Vì vậy, nếu Naveed có hai bản ghi Địa chỉ, bạn sẽ có hai hàng trong tập hợp kết quả với person_id = 1.

+0

Vâng, tôi đang tìm kiếm sự hỗ trợ JOIN trong zend và muốn biết cách triển khai truy vấn trên của bạn trong zend. Trong kịch bản của tôi, một người chỉ có một địa chỉ tại một thời điểm. Dù sao cảm ơn cho phản ứng của bạn và truy vấn của bạn sẽ giúp tôi. – NAVEED

Các vấn đề liên quan