无法获取JOIN语句以返回结果

时间:2014-07-26 06:20:59

标签: php mysql join mysqli

我实际上是第一次尝试使用JOINS而且我很难接受它。我有两个表...故事和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>';

现在我还要包括编写故事的用户的姓名(&#34; display_name&#34;来自wp_users表)

在阅读了很多关于联接的网站后,下面的方法似乎最好,但遗憾的是它没有返回结果:

<?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';
}

2 个答案:

答案 0 :(得分:0)

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

  1. 在您的第一个代码段中,您使用$wpdb->get_results(),而在第二个代码段中有$wpdb->query()。返回值和参数含义可能有所不同。
  2. 了解查询后请求错误消息并使用它来转储消息的方法。通常,如果没有返回任何行,那是因为出现了错误。
  3. 确保num_rows确实来自$results。这里(http://codex.wordpress.org/Function_Reference/wpdb_Class)表示表达式为$wpdb->num_rows。 (您可以通过在网站上搜索'num_rows'找到它,它会向下滚动。)
  4. 尝试使用MySQL命令Shell或某些PhpMyAdmin沙箱来检查查询。直接输入SQL将显示拼写错误和SQL代码中的“未知列”等其他问题,并允许快速编辑。加入语法因数据库而异,但您的LEFT JOIN对MySQL是可以接受的。句法层面似乎没有问题。
  5. 此文档http://codex.wordpress.org/Function_Reference/wpdb_Class可能有助于明确代码。

答案 1 :(得分:0)

知道了!

<?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>';
}
?>