2013-09-01 50 views
1

對不起先爲我糟糕的英語...但我有一些問題需要一些建議MySQL查詢陣列

我怎麼能在一個查詢從數據庫中獲得數據?ISIT能夠從數據庫獲取陣列,主要內數組有另一個數組?

表結構:

user_post - 
    id int(12) AI unique 
    uid int(12) 
    content text 

user_image - 
    filename varchar255 
    uid int(12) 
    pid int(12) index 
    pid->foreign_key user_post.id 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 

例如: 每個user_post可以包含超過1個user_image但最多10行,我怎麼能選擇並在1個陣列使一切都在一起,所以不需要像下面那樣運行查詢2次?

查詢2次,以完成這個例子:

$db = new Db('main'); 
$db->query('SELECT `id`, `uid`, `content` FROM `user_post` WHERE `id` = :id LIMIT 1'); 
$db->bind(':id', '1'); //Example 
$result = $db->single(); 

$db->query('SELECT `filename`, `uid`, `pid` FROM `user_image` WHERE `pid` = :pid LIMIT 10'); 
$db->bind(':pid', $result['id']); 
$images = $db->resultset(); 

所以$圖像將包含所有職位的圖像文件名,反正讓它在1個查詢?

回答

1

可以在只有一個查詢做到這一點,由荷蘭國際集團JOIN兩個表:

SELECT p.id, p.uid, p.content, 
    i.filename, i.uid, i.pid 
FROM user_post AS p 
INNER JOIN user_image AS i ON i.pid = p.id 
WHERE p.id = :id 
LIMIT 10; 
+0

謝謝,現在試試吧,內部連接相當混淆,所以後來$ result ['user_image']會是一個包含所有圖像的數組? – geass

+0

@geass,no結果將包含來自您選擇的兩個表的所有字段「p.id,p.uid,p.content, i.filename,i.uid,i.pid',您可以選擇只有你想要選擇的內容,並且最後使用'WHERE'子句來表達你的條件。 –

+0

恩......我測試過,它完全得到我想要的。 但得到了另一個問題,是否有可能運行,如果其他在MySQL查詢? user_post獲得另一個字段的調用類型,如果類型0意味着該帖子包含圖像,如果類型1意味着該帖子沒有任何圖像,所以不需要使用INNER JOIN,如果其他內部查詢是可以做的嗎? – geass

0

簡單地說,使用一個內連接。我沒碰過MySQL的一段時間,它已經用PHP甚至更長的時間,但我會盡力幫助:

SELECT `user_post`.*, `user_image`.* FROM `user_post` INNER JOIN ON `user_image`.`pid` = `user_post`.`id` WHERE `user_post`.`id` = :id 

你要設立這樣的外鍵。

+0

謝謝你的回答,會去讀mysql內連接 – geass