[英]Inner join from 3 tables in one result
我有3張桌子:
tb_document
============================
|document_id|document_title|
============================
| 1 | A |
| 2 | B |
| 3 | C |
============================
tb_wrapper_scho tb_wrapper_li
============================= =============================
|id_scho|data_title|doc_name| |id_sli |data_title|doc_name|
============================= =============================
| 1 | TitleA | A | | 1 | TitleB | B |
| 2 | TitleC | C | =============================
=============================
我想從tb_wrapper_scho
和tb_wrapper_li
獲取data_title
,其中在一個結果$title
, tb_document
中的document_title
具有相同的doc_name
這是查詢:
SELECT
tb_document.document_title,
tb_wrapper_scho.data_title,
tb_wrapper_scho.doc_name,
tb_wrapper_li.data_title,
tb_wrapper_li.doc_name
FROM
INNER JOIN tb_wrapper_scho ON tb_document.document_title = tb_wrapper_scho.doc_name
INNER JOIN tb_wrapper_li ON tb_document.document_title = tb_wrapper_li.doc_name
WHERE
document_id = '$doc_id'
while ($row = mysql_fetch_array($sql)) {
$title = $row['data_title'];
print_r($title);
}
它給我空白的結果。 請幫助我..謝謝:)
您在FROM
子句中缺少tb_document
表。 嘗試以下方法:
SELECT
d.document_title,
s.data_title,
s.doc_name,
i.data_title,
i.doc_name
FROM tb_document d
INNER JOIN tb_wrapper_scho s ON d.document_title = s.doc_name
INNER JOIN tb_wrapper_li i ON d.document_title =i.doc_name
WHERE
document_id = '$doc_id'
SELECT
tb_document.document_title,
tb_wrapper_scho.data_title,
tb_wrapper_scho.doc_name,
tb_wrapper_li.data_title,
tb_wrapper_li.doc_name
FROM tb_document
left outer JOIN tb_wrapper_scho ON tb_document.document_title = tb_wrapper_scho.doc_name
left outer JOIN tb_wrapper_li ON tb_document.document_title = tb_wrapper_li.doc_name
WHERE
document_id = '$doc_id'
我有主意,您想要嗎?
SELECT * FROM
(SELECT * FROM tb_document as tbDoc INNER JOIN tb_wrapper_scho as tbScho
ON tbDoc.document_title = tbScho.doc_name
UNION
SELECT * FROM tb_document as tbDoc INNER JOIN tb_wrapper_li as tblI
ON tbDoc.document_title = tblI.doc_name)threeTableJoin ORDER BY `document_id` ASC
只是,祝你好運!
由於表包含具有相同名稱的列,因此在使用別名檢索數據時,必須將列名稱更改為不同的名稱。 因此結果數組必須包含每個值的唯一索引。 因此您的查詢必須為
SELECT
d.document_title as document_title,
s.data_title as scho_data_title,
s.doc_name as scho_doc_name,
li.data_title as li_data_title,
li.doc_name as li_data_name
FROM
tb_document d
LEFT JOIN tb_wrapper_scho s ON d.document_title = s.doc_name
LEFT JOIN tb_wrapper_li li ON li.doc_name = d.document_title
WHERE
d.document_id = '$doc_id'
SELECT
tb_document.document_title,
tb_wrapper_scho.data_title,
tb_wrapper_scho.doc_name,
tb_wrapper_li.data_title,
tb_wrapper_li.doc_name
FROM tb_document AS tb_document
LEFT JOIN tb_wrapper_scho AS tb_wrapper_scho ON (tb_wrapper_scho.doc_name=tb_document.document_title)
LEFT JOIN tb_wrapper_li AS tb_wrapper_li ON (tb_wrapper_li.doc_name=tb_document.document_title)
WHERE tb_document.document_id = intval($doc_id);
有什么好處嗎
您還可以檢查mysql_query的結果,並且mysql_fetch_array()應該返回TRUE。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.