我有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 |
=======================
我想从3个表中获得具有相同web
的所有记录数据。
这是我的代码:
$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和AA D.如何制作AA B D?
请帮帮我。提前谢谢:)
答案 0 :(得分:2)
$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,这是无效的语法。
答案 1 :(得分:1)
您可能需要更多地阅读有关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”列。
如果您只看前2个表,它们只有1行而'web'是A.如果您只加入这些表,您将获得1行结果:
==================================
|web|title|source| web | content |
==================================
| A | AA | AAA | A | AAAA |
==================================
但是你的第三个表有两行具有相同的'web'值。加入前两个表的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 B D',那么简单的行迭代就不够了。
要查看值在唯一值时的更改方式,请在“id”列中加入所有行。由于每行的“id”在您的示例中是唯一的,因此您的结果中只会得到1行。
如果你试图获取从不同行返回的值(比如显示标题和内容一次,然后显示'aut'值列表),则需要使用2个不同的查询或在您的while
循环。