我试图从两个不同的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你好
了解最新动态
了解最新动态
模拟下雨
模拟下雨
乔治马铃薯 乔治马铃薯为什么这样做?
两个表中唯一相同的是用户名。
答案 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方法的附件。
我相信这有帮助。