我想使用多个表来获取最近的帖子(Q)和用户名(句柄),但是当我尝试使用此代码获取时,它给出了错误
表名称qa_posts和qa_users,并且需要将userid从qa_posts连接到handle来自qa_users的strong>
SELECT *
FROM qa_posts, qa_users
WHERE type="Q" AND qa_posts.userid = "qa_users.handle"
ORDER BY created DESC
LIMIT 5
错误消息
SELECT *
FROM qa_posts, qa_users
WHERE qa_posts.userid = "qa_users.handle"
ORDER BY created DESC
LIMIT 5
Error 1052: Column 'created' in order clause is ambiguous
实际代码
qa_db_connection();
$query_post = qa_db_query_raw('
SELECT *
FROM qa_posts, qa_users
WHERE type="Q" AND qa_posts.userid = "qa_users.handle"
ORDER BY created DESC
LIMIT 5
') or die(mysql_error());
while($row = mysql_fetch_array($query_post)) {
echo $row['title'];
echo '<span style="font-size:65%;font-style:italic">'.$row['created'].'</span>';
echo '<br/>';
}
请参阅此图片了解表结构
最佳答案
当两个表中都有相同名称的列时,就会出现给定的错误...因此,您必须指定列名称和表名称,如下所示:
table_name.column_name
所以,您的查询应该是这样的:
SELECT *
FROM qa_posts, qa_users
WHERE qa_posts.userid = "qa_users.handle"
ORDER BY qa_posts.created DESC (or put the ORDER BY qa_users.created DESC if you want to make order by `created` of `qa_users` )
LIMIT 5
如果您确实不希望用户 ID 值为“qa_users.handle”,则不应引用它们,并且应具有如下查询:
SELECT *
FROM qa_posts, qa_users
WHERE qa_posts.userid = qa_users.userid AND qa_posts.type="Q"
ORDER BY qa_posts.created DESC
LIMIT 5
您最好按以下方式使用 JOIN:
SELECT *
FROM qa_posts INNER JOIN qa_users ON qa_posts.userid = qa_users.userid
WHERE qa_posts.type="Q"
ORDER BY qa_posts.created DESC
LIMIT 5
关于MYSQL 多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12333132/