我不知道這是可能的,但有沒有在MySQL的方式產生,其中一個一對多表的多個結果聯接可被設置爲在一個陣列中的單個查詢一個項目的結果的關鍵?MySQL的一個連接到多臺關係
我意識到,問題不是很清楚,所以我將解釋什麼,我經過進一步的:
首先,我目前使用隱式連接,並想了解更多關於明確連接(其中我目前知道的很少),也許這些可以提供我正在尋找的答案?
例如,給定兩個表:
CREATE TABLE `a` (
`id_a` int(11) NOT NULL AUTO_INCREMENT,
`a_column1` varchar(255) NOT NULL,
...
PRIMARY KEY (`id_a`)
)
CREATE TABLE `b` (
`id_b` int(11) NOT NULL AUTO_INCREMENT,
`id_a` int(11) NOT NULL,
`b_column1` varchar(255) NOT NULL,
...
PRIMARY KEY (`id_b`)
)
如果表B具有與在表中的一個條目的條目。
如果我運行下面的查詢:
SELECT a.*, b.* FROM a, b WHERE b.id_a = a.id_a AND a.id_a = x;
我會得到與重複單項ID x的數據的多個條目的數組。我真正想要的是從表a
定義爲b
其中包含多個匹配條目從表b
數組的一個關鍵返回一行。我懷疑這僅僅是一個查詢是不可能的,但如果是這樣的話,它會很好。目前我正在PHP中進行以下操作(其中$ this - > _ db是一個Zend Framework數據庫適配器)。這將運行很多查詢!:
$query = "SELECT * FROM a WHERE id_a = ?";
$items = $this->_db->fetchAll($query, $id);
foreach($items as $key => $item) {
$query = "SELECT * FROM b WHERE id_a = ?";
$items[$key]['b'] = $this->_db->fetchAll($query, $item['id']);
}
或者我可以用我原來的連接查詢和提交過程,我懷疑是更有效的,但意味着我需要通過我需要明確地列複製(疼痛和遠離優雅):
$query = "SELECT * FROM a, b WHERE a.id_a = b.id_a AND a.id_a = ?";
$items = $this->_db->fetchAll($query, $id);
$output = array('a_column1' => $items[0]['a_column1'], etc...);
$output['b'] = array();
foreach($items as $item) {
$b = array('b_column1' => $item['b_column1'], etc...);
$output['b'][] = $b;
}
謝謝,這正是我所追求的。 – baseten