MYSQL 多表

标签 mysql multiple-tables

我想使用多个表来获取最近的帖子(Q)和用户名(句柄),但是当我尝试使用此代码获取时,它给出了错误

表名称qa_postsqa_users,并且需要将useridqa_posts连接到handleqa_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 Strucute

最佳答案

当两个表中都有相同名称的列时,就会出现给定的错误...因此,您必须指定列名称和表名称,如下所示:

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/

相关文章:

mysql - Union MYSQL 中的 GROUP BY

php - 如何在 codeigniter 中将数据从 post 传递到 ajax

PHP:我的页面需要很长时间才能加载但不会超时。一次有太多查询还是可以优化我的代码?

java - 如何按列从数据库中获取记录

mysql - SQL - 使用多个引用和 IN 子句进行选择

mysql问题left join and from_unixtime

javascript - 如何向 PHPMyAdmin 添加 Mathjax 支持

php - 从具有关系的多个表中选择数据

php - 如何使用 MySql 和 PHP 存储/处理多个表的数据

php - 返回之前修改 mysql php 查询结果