У меня есть три таблицы как это:
Таблица Person:
person_id | name | dob
--------------------------------
1 | Naveed | 1988
2 | Ali | 1985
3 | Khan | 1987
4 | Rizwan | 1984
Таблица адресов:
address_id | street | city | state | country
----------------------------------------------------
1 | MAJ Road | Karachi | Sindh | Pakistan
2 | ABC Road | Multan | Punjab | Pakistan
3 | XYZ Road | Riyadh | SA | SA
Таблица Person_Address:
person_id | address_id
----------------------
1 | 1
2 | 2
3 | 3
Теперь я хочу получить все записи таблицы Person_Address, но также и с их личностью и записями адреса как это одним запросом:
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
Как это - возможный пехлеви использования?Спасибо
Справочное руководство является лучшей отправной точкой для изучения Zend_Db_Select. Наряду с моим примером ниже, конечно:
//$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'));
Затем для получения строки все просто:
$db->fetchRow($select);
При отладке Zend_Db_Select можно использовать хитрый трюк - просто распечатать объект select, который в свою очередь вызывает метод toString для создания SQl:
echo $select; //prints SQL
Я не уверен, ищете ли вы SQL для выполнения вышеописанного, или код, использующий средства Zend. Учитывая наличие в тегах слов "sql" и "joins", вот SQL, который вам понадобится:
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
Имейте в виду, что Person_Address говорит нам, что между персоной и адресом существует отношение "многие ко многим". Многие лица могут иметь один адрес, а у одного лица может быть более одного адреса.
SQL выше покажет ВСЕ такие отношения. Таким образом, если у Навида есть две записи об адресах, в наборе результатов будет две строки с person_id = 1.