2014-10-07 61 views
-2

当我运行这个MySQL查询时,它不返回任何结果。我相信这一定是一个语法错误,但我不能看到我错了:MySQL JOIN查询不返回任何结果

这里是我的查询:

$table_search = mysqli_query($mysqli, "SELECT tables.* FROM tags ON tags.post_id = tables.post_id WHERE tables.post_id = ".$post['id']." AND tags.tag = ".$tag); 

我知道这两个$post['id']$tag都没有问题,因为我有检查这些变量,并且它们都返回了被忽略的值。有一次,我已经跑了我的查询我计划输出数据,像这样:

while($table = mysqli_fetch_array($table_search)) { 

    echo $table['content']; 

} 

当我在我的脚本运行错误报告是这样的错误:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /Users/.../search.php on line 63 

我不知道如何解决这个问题或者我的代码有什么问题。

+1

哪来的'JOIN'语法? – ekad 2014-10-07 07:13:44

+1

您在查询时发生错误。可能你需要从: 选择...从表加入tags上的标签.post_id = tables.post_id ... – krynio 2014-10-07 07:16:28

回答

2

JOIN您的查询中缺少。而且,如果$tag是一个字符串,则必须将其放在引号内。

纠正你的查询

$table_search = mysqli_query($mysqli, "SELECT tables.* FROM tags JOIN tables ON 
tags.post_id = tables.post_id WHERE tables.post_id = ".$post['id']." AND tags.tag = 
'".$tag."'"); 
+0

感谢Jenz的帮助。我会尽快尝试,让你知道我如何继续。 – Harry 2014-10-07 07:26:57

0

你想两个表结合不连接语句, 看看这个answer

在代码中添加此:

if (!$table_search) { 
    printf("Error: %s\n", mysqli_error($con)); 
    exit(); 
} 

此线后:

$table_search = mysqli_query($mysqli, "SELECT tables.* FROM tags ON tags.post_id = tables.post_id WHERE tables.post_id = ".$post['id']." AND tags.tag = ".$tag);

更好地了解你得到的错误。

docs

+0

感谢您的错误报告帮助。我会运行这个,让你知道我如何继续。 – Harry 2014-10-07 07:29:48

0

你的SQL查询是错误的阅读了关于MySQL的JOIN语句。

在通过代码运行查询之前,您可以使用phpmyadmin或任何其他工具来检查您的查询。

使用

$table_search = mysqli_query($mysqli, "SELECT * FROM tags where tags.post_id = {select tables.post_id from tables WHERE tables.post_id = $post['id']} AND tags.tag = $tag);