[英]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.