2016-06-19 111 views
0

我有兩個表,名爲table_1table_2。該模式有點如下。MySQL從多個表查詢?

TABLE_1

+----+--------+-----+------------+ 
| id | reg_no | ... | table_2_id | 
+----+--------+-----+------------+ 

TABLE_2

+----+-----+ 
| id | ... | 
+----+-----+ 

table_2_idtable_1指塔idtable_2。現在,我必須獲得table_2_id的特定reg_no,然後使用該table_2_idtable_2獲取數據。

我目前做如下,它的工作原理。

$stmt = $this->conn->prepare("SELECT table_2_id from table_1 WHERE reg_no = ?"); 
$stmt->bind_param("s", $reg_no); 
$stmt->execute(); 
$stmt->bind_result($table_2_id); 
$stmt->fetch(); 
$stmt->close(); 
$stmt = $this->conn->prepare("SELECT * from table_1 WHERE id = ?"); 
$stmt->bind_param("i", $table_2_id); 
$stmt->execute(); 
... 

這是正確的方法嗎?是否有一些更高效的查詢來執行此任務?

+1

您可以嘗試將兩個表連接在一起,然後執行單個查詢以獲取結果。 –

+0

你能說明一下嗎? –

+0

嘗試類似這樣'SELECT table_2。* FROM table_1 LEFT JOIN table_2 ON table_1.table_2_id = table_2.id WHERE table_1.reg_no =?' – gdros

回答

0

它應該是更有效的使用一個查詢這樣做:

SELECT table_2.* 
FROM table_1 LEFT JOIN table_2 ON table_1.table_2_id=table_2.id 
WHERE table_1.reg_no = ? 

table_1 LEFT JOIN table_2 ON table_1.table_2_id=table_2.id將加入TABLE_1和TABLE_2。 更具體地說,它將創建一個表,它將包含來自table_1和table_2的所有列,並且它將放入table_1中的所有行。另外,當table_2中有一行id與 table_2_id相同時,它也會填充tables_2的列。

上述行動將僅限於在那裏table_1.reg_no = ?

最後用SELECT table_2.*我們從TABLE_2只得到列在你的榜樣那些行。

+0

只是一個查詢:不會'INNER JOIN'對我的用例更好嗎? –

+0

嗯,在確切的情況下是的,但通常取決於你想要做什麼。當table_2中沒有相關的行時,INNER JOIN將返回給你沒有行,並且LEFT JOIN將返回table_1中具有指定的reg_no的每行的空列的行 – gdros

1

使用查詢加入

SELECT t2.* 
FROM table_1 t1 
JOIN table_2 t2 ON t1.table_2_id = t2.id 
WHERE t2.t1reg_no = ? 
+0

你能解釋一下嗎? –

+0

你可以在http://dev.mysql.com/doc/refman/5.7/en/join.html閱讀關於連接的內容。需要什麼解釋? – Serg

+0

他希望table_2中的數據不是來自table_1 ... @Serg – gdros

0

嘗試

SELECT T2.* FROM table_2 T2 
LEFT JOIN table_1 T1 ON T1.table_2_id = T2.id 
WHERE T1.reg_no = ?; 

TABLE_1

id reg_no table_2_id 
1  001  1 
2  002  2 
3  003  4 
4  004  7 
5  005  8 

TABLE_2

id column_test 
1  A 
2  B 
3  C 
4  D 
5  E 
6  F 
7  G 

查詢

SELECT T2.* FROM table_2 T2 
LEFT JOIN table_1 T1 ON T1.table_2_id = T2.id 
WHERE T1.reg_no = 003; 

輸出

id column_test 
4  D