MySQL从同一查询中的两个表中进行选择

时间:2014-02-13 03:19:25

标签: php mysql sql while-loop

我试图从两个不同的mysql表中选择所有内容。我破坏了一个名为friends的数组,这样我就可以从两个表中选择关于用户朋友的所有内容。最初我想在一个表上执行一个查询,然后在while循环中对另一个表执行查询。但那没用。如果你知道我可以在循环中嵌套,那么请务必评论/回答这个问题。

这是我的代码:

$friends = implode("','", $friends);
//implode the friends array for sql query

$sql = mysqli_query($con, "SELECT * FROM users, text_post WHERE username IN ('$friends')") or die(mysqli_error($con));
while ($row = mysqli_fetch_assoc($sql)) {
    echo $row['last_name']. ' ' . $row['body'];
    echo '<br><br>';
}

注意:$row['last_name']来自users表,$row['body']来自text_post表。每当我运行代码Column 'username' in where clause is ambiguous

时,我都会收到此错误消息

请帮帮我。

更新:

我将查询更改为:$sql = mysqli_query($con, "SELECT * FROM users, text_post WHERE users.username IN ('$friends')") or die(mysqli_error($con));但现在每次匹配都会回显两次:


parker你好

parker你好

了解最新动态

了解最新动态

模拟下雨

模拟下雨

乔治马铃薯

乔治马铃薯


为什么这样做?

两个表中唯一相同的是用户名。

6 个答案:

答案 0 :(得分:0)

两个表都有用户名。使用table.username

指定它

答案 1 :(得分:0)

显然两个表都有相同的列,并且您没有在username列前添加任何表名。 也许你想要的是工会?

答案 2 :(得分:0)

users块中使用表格前缀where,即users.username

$sql = mysqli_query($con, "SELECT * FROM users, text_post WHERE users.username IN ('$friends')") or die(mysqli_error($con));

答案 3 :(得分:0)

试试这个:

$friends = implode("','", $friends);
    //implode the friends array for sql query

    $sql = mysqli_query($con, "SELECT users.last_name,text_post.body FROM users, text_post WHERE username IN ('$friends')") or die(mysqli_error($con));
    while ($row = mysqli_fetch_assoc($sql)) {
        echo $row['last_name']. ' ' . $row['body'];
    }

答案 4 :(得分:0)

如果两个表中都没有用户名,那么你的逻辑就可以了。因为它是,您需要为表名设置别名,以便您可以唯一地标识要在where子句中尝试使用的列:

SELECT *来自用户AS u,text_post为tp 在哪里u.username IN(....)

或更短: SELECT *来自用户u,text_post tp 在哪里u.username IN(....)

作为旁注,SELECT *是不好的做法,你应该总是明确地选择你想要的列,否则你的代码可能会在以后向表中添加一列并且忘记更新for循环以包含/忽略时崩溃任何改变的列。

答案 5 :(得分:0)

感谢您的提问。这里的问题是您收到的错误:

Column 'username' in where clause is ambiguous.

这意味着您正在运行的语句过于模糊。

要避免这种情况,您需要做的是明确定义您尝试访问的表和列,从而隐含在您的语句中。

根据经验,尝试并始终按以下格式定义列:

{table_name}.{column_name}

据说这应该起作用:

$friends = implode("','", $friends);
/* implode the friends array for sql query. */

$sql = mysqli_query($con, "SELECT * FROM users, text_post WHERE users.username IN ('$friends') AND text_post.username IN ('$friends')") or die(mysqli_error($con));
while ($row = mysqli_fetch_assoc($sql)) {
    echo $row['last_name']. ' ' . $row['body'];
}

另外我还建议您使用PHP的PDO对象作为mysqli_query方法的附件。

我相信这有帮助。