【问题标题】:Can't get JOIN statement to return results无法让 JOIN 语句返回结果
【发布时间】:2014-09-18 01:02:21
【问题描述】:

我实际上是第一次尝试使用 JOINS,但我很难让它去。我有两个表...stories 和 wp_users,我正在尝试返回所有故事,并在每个故事中包含来自用户的用户的 display_name。

此代码可以很好地从故事中获取所有结果并显示故事名称和类型:

$results = $wpdb->get_results("SELECT * FROM stories where stories.active = 1");
foreach ($results as $row) {
echo '<tr>';
echo '<td>' . $row->story_name; '</td>';
echo '<td>' . $row->genre; '</td>';

现在我还想包含撰写故事的用户的姓名(wp_users 表中的“display_name”)

在阅读了许多关于加入的网站后,以下方法似乎是最好的,但遗憾的是它没有返回任何结果:

<?php 
global $wpdb;

$sql = "SELECT stories.story_name, stories.genre, wp_users.display_name as display FROM
stories LEFT JOIN wp_users ON stories.ID=wp_users.ID where stories.active = 1";

$results = $wpdb->query($sql);

if($results->num_rows) {
while($row = $results->fetch_object())  {
echo "{$row->story_name} {$row->genre} {$row->display}<br>";
}
}
else  {
echo 'No results';
}

【问题讨论】:

  • 连接可能出错。尝试$results = $wpdb-&gt;query($sql) or die($wpdb-&gt;error); 以查看错误消息。
  • 我确信这是连接的问题,因为它在我的连接语句之前一直返回结果。我添加了模具代码,它只说“没有结果”
  • 这只会在用户 ID = 故事 ID 时返回结果我假设你想要一个用户 ID = storycreatorid 或类似的东西
  • 是的,我希望用户 ID(也就是 users 表中的“ID”)与 stories 表中的用户 ID(也就是“ID”)相匹配。还有一个故事 ID 字段 SID,但我在这里没有涉及。为什么你说只有 userid = a storyid 才会显示结果
  • 在名为 stories 的表中名为 id 的列应该对应于名为 user 的表中名为 id 的列,这似乎很奇怪,但是嘿,这是您的架构,您选择不显示它给我们。

标签: php mysql join mysqli


【解决方案1】:

以下是一些可能有帮助的建议:

  1. 在您的第一个代码 sn-p 中,您使用的是 $wpdb-&gt;get_results(),而在您的第二个 sn-p 中,您使用的是 $wpdb-&gt;query()。返回值和参数的含义可能会有一些差异。
  2. 了解查询后询问错误消息的方法,并使用它来转储消息。如果没有返回任何行,通常是因为出现了错误。
  3. 确保num_rows 确实来自$results。这里 (http://codex.wordpress.org/Function_Reference/wpdb_Class) 表示表达式是 $wpdb-&gt;num_rows。 (您可以通过在网站上搜索“num_rows”找到它,它会向下滚动。)
  4. 尝试使用 MySQL Command Shell 或一些 PhpMyAdmin 沙箱来检查查询。直接输入SQL会出现错别字和SQL代码中的“未知列”等问题,可以快速编辑。连接语法因数据库而异,但您的 LEFT JOIN 对 MySQL 来说是可以的。在句法层面上似乎没有问题。

这个文档http://codex.wordpress.org/Function_Reference/wpdb_Class 可能有助于弄清楚代码。

【讨论】:

  • 我确实仔细阅读了抄本;遗憾的是,关于与 $wpdb 连接的信息很少甚至没有。我想这可能与您的回复中的第一名有关。自从我开始这个网站以来,我一直担心会遇到这个加入问题,果然这非常具有挑战性
  • 通常可以使用完整而简单的SELECT SQL 语句,也可以使用连接的SQL 语句。这并不难 :-) 也许你迈的太大了。回到您的第一个运行良好的 sn-p,再次运行它以检查它是否仍然运行,然后更改 only SQL 语句,将其替换为 JOINed 语句。如果这仍然可以正常工作,请尝试迭代结果集。这样您就可以观察是哪个步骤导致了问题。
  • 知道了!刚刚发布了答案。感谢您的想法和帮助!
【解决方案2】:

知道了!

<?php 
global $wpdb;
$results = $wpdb->get_results("SELECT stories.story_name, stories.genre,
wp_users.display_name FROM stories LEFT JOIN wp_users ON stories.ID=wp_users.ID where  
stories.active = 1");

if ($results) {
echo '<table>';
echo '<tr>';
echo '<td><b>Story Name</b></td>';
echo '<td><b>Genre</b></td>';
echo '<td><b>Last User on this Website to See</b></td>';
echo '</tr>';

foreach ($results as $row) {

echo '<tr>';
echo '<td>' . $row->story_name; '</td>';
echo '<td>' . $row->genre; '</td>';
echo '<td>' . $row->display_name; '</td>';
echo '</tr>';
}
echo '</table>';
}
?>

【讨论】:

    猜你喜欢
    • 2011-01-23
    • 2023-03-21
    • 1970-01-01
    • 2011-02-16
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多