使用mysql / php从多个表的多个联接返回多个结果

用户5000

好的,我想尝试进行涉及3个表的多个联接。在此页面的URL中传递了故事ID(SID)后,只需尝试返回故事的标题,作者和文本。基本上,我试图返回故事的标题,故事的作者和文本。到目前为止,只有故事标题才在该代码中起作用。

该脚本正在传递故事ID(SID),我正在尝试使用它来获取作者的姓名和故事的文本,以及起作用的故事标题。

这是3个表格:

user_meta table which has ID, display_name
stories table which has ID, SID, story_name
writing table which has SID, text

这是到目前为止的代码(同样,只有在URL中传递了SID之后,到目前为止只有标题才有效)

<?php
global $wpdb;
// get the SID
$the_SID = ( isset( $_GET['writing'] ) ) ? $_GET['writing'] : false;


$results = $wpdb->get_results("
SELECT wp_users.ID, wp_users.display_name,
stories.SID, stories.story_name,
writing.text
FROM stories
LEFT JOIN writing ON stories.SID = writing.SID
LEFT JOIN wp_users ON stories.ID = wp_users.ID
WHERE stories.SID = $the_SID");
?>

Title: <b><?php echo $results[0]->story_name ?></b>
<p>
by: <em><?php echo $results->display_name ?></em><br />
<p>
<?php echo $results->text ?>    

我知道会有sql注入问题,但是现在我只是想学习如何通过3个表的多个联接返回这3个变量。弄清楚应该将什么连接到什么以及在何处连接,这足够棘手,更不用说我所知道的上面有问题的实际代码结构了。

琼斯

行话

就像您所知道的行话一样:DDL是数据定义语言-表的定义。http://sqlfiddle.com/是一个非常酷的网站,您可以在其中摆弄SQL查询,然后在诸如StackOverflow问题之类的地方发布链接。

回答问题

如果我正确地理解了您的问题,并给定了一个特定的SID值(假定为故事ID),则需要该故事的作者,标题和文本。

您确实应该使用单个查询来获取该信息。我认为此查询将为您提供所需的信息:

SELECT u.ID. u.display_name,
       s.SID, s.story_name,
       w.text
  FROM stories AS s
  JOIN user_meta AS u ON s.ID = u.id
  JOIN writing AS w ON s.SID = w.SID
 WHERE s.SID = $the_SID

(注意:我已经格式化了这些内容,因此很容易看到SQL逻辑。您可以在代码中的任意位置放置换行符。)

解释

这里的技巧是使用JOIN操作来组合来自不同表的信息。ON子句控制要被联接的表中的哪些行与第一张表中的每一行相关联。

该查询从stories开始

  FROM stories AS s

然后user_meta通过匹配ID这两个表中的列将其连接到该表。这是基于这些ID列标识用户的猜测

  JOIN user_meta AS u ON s.ID = u.id

最后,它writing使用SID连接到

  JOIN writing AS w ON s.SID = w.SID

评论

您的示例中有一些奇怪的查询,类似于下一行。这些是自联接,您可以在其中将表联接到自身。在尝试这样做之前,您可能应该掌握不同表之间的JOIN操作。

FROM writing LEFT JOIN writing ON stories.SID=writing.SID  /*probably wrong*/

您可能想要这种东西,因为它更有意义。

FROM stories LEFT JOIN writing ON stories.SID=writing.SID

为了回答您评论中的问题,大多数使用SQL编写软件应用程序的人都试图减少查询数量。他们试图避免编写PHP以使用一个查询的结果来驱动第二个查询。这个想法是从PHP代码到MySQL服务器的往返是最小的。这不是一成不变的规则,但确实有助于提高性能。

您在问题中提到了WordPress API的一部分。您需要知道名称以WordPress结尾的WordPress表格_meta比您提到的user_meta表格具有更精细的结构如果您实际使用WordPress的,则这些查询可能无法正常工作user_meta

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章