[英]Inner join from 3 table
我有3張桌子:
tb_wrapper tb_doc tb_aut
===================== ==================== =======================
|id|web|title|source| |id| web | content | |id|web|aut | linkAut|
===================== ==================== =======================
|1 | A | AA | AAA | |1 | A | AAAA | |1 | A | B | C |
===================== ==================== |2 | A | D | E |
=======================
我想從具有相同web
3個表中獲取所有記錄數據。
這是我的代碼:
$query = mysql_query("
SELECT
tb_wrapper.web,
tb_wrapper.title,
tb_wrapper.source,
tb_doc.web,
tb_doc.content,
tb_aut.web,
tb_aut.aut,
tb_aut.linkAut
FROM
tb_doc
INNER JOIN tb_wrapper ON tb_doc.web = tb_wrapper.web
AND
INNER JOIN tb_aut ON tb_doc.web = tb_aut.web
");
錯誤問題: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\\AppServ\\www\\sukses\\indexsummary.php on line 87
。
編輯
然后我想將它們全部打印出來:
while ($row = mysql_fetch_array($query)) {
$source = $row['source'];
$title = $row['title'];
$content = $row['content'];
$aut = $row['aut'];
$linkAut = $row['linkAut'];
echo '<h2><a href='.$source.'> '.$title.' </a></h2>';
echo '<p><a href='.$aut_url.'> '.$aut.' </a></p>';
}
結果,它們被打印了兩次。 AA B和AAD。如何使它們成為AA BD?
請幫我。 提前致謝 :)
$query = mysql_query("
SELECT
tb_wrapper.web,
tb_wrapper.title,
tb_wrapper.source,
tb_doc.web,
tb_doc.content,
tb_aut.web,
tb_aut.aut,
tb_aut.linkAut
FROM
tb_doc
INNER JOIN tb_wrapper ON tb_doc.web = tb_wrapper.web
INNER JOIN tb_aut ON tb_doc.web = tb_aut.web
您需要刪除內部聯接之間的AND,這是無效的語法。
您可能需要閱讀更多有關JOINS如何在SQL中工作的信息。 您似乎想從多行中收集結果,通常這不是它的工作方式。
如果要在每個表的非唯一列上聯接,則應該期望具有重復值的行會得到重復結果。
我可能沒有適當地解釋這一點,因此請在下面進行詳細說明。 這又是您的表格作為參考:
tb_wrapper tb_doc tb_aut
===================== ==================== =======================
|id|web|title|source| |id| web | content | |id|web|aut | linkAut|
===================== ==================== =======================
|1 | A | AA | AAA | |1 | A | AAAA | |1 | A | B | C |
===================== ==================== |2 | A | D | E |
=======================
您的查詢(沒有其他人建議的AND)將聯接每個表的'web'列。
如果僅查看前兩個表,則它們只有1行,並且'web'為A。如果僅連接這些表,則會得到1行結果:
==================================
|web|title|source| web | content |
==================================
| A | AA | AAA | A | AAAA |
==================================
但是您的第三個表有2行,具有相同的“ web”值。 聯接前2個表的1行結果可以聯接到第三個表的兩行。 這將產生以下結果:
=====================================================
|web|title|source| web | content |web|aut | linkAut|
=====================================================
| A | AA | AAA | A | AAAA | A | B | C |
| A | AA | AAA | A | AAAA | A | D | E |
=====================================================
然后,您的PHP遍歷結果,並從每一行打印2列(“ title”和“ aut”),結果是:
AA B
AA D
這正是它應該如何工作的。 如果要獲得“ AA BD”的結果,則僅通過行進行迭代是不夠的。
要查看值唯一時的變化,請在“ id”列上連接所有行。 由於每行的“ id”在您的示例中都是唯一的,因此您的結果將僅獲得1行。
如果您想獲取從不同行返回的值(例如一次顯示“標題”和“內容”,然后顯示“ aut”值的列表),則需要使用2個不同的查詢或在while
循環中添加一些其他邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.