【问题标题】:mysql Selecting from two different tables.mysql 从两个不同的表中选择。
【发布时间】:2012-07-22 20:08:07
【问题描述】:
$sql = "select body, stamp from posts where user_id = '$userid' order by stamp desc";

注意:上述查询工作正常。我想做的也是从我的用户表中选择用户名,并显示与 user_id 匹配的用户名。

我已经像这样编辑了上面的语句,但它不起作用。有人可以提出正确的查询吗?我的目标是也能够显示用户名。除了简单地显示 user_id。

$sql = "select body, stamp from posts AND username from users where user_id = '$userid' order by stamp desc";

我的目标是还能够显示用户名。而不是简单的 user_id。

【问题讨论】:

标签: php mysql sql


【解决方案1】:

您需要使用 JOIN 将两个表放在匹配字段中,例如:

$sql = "SELECT p.body, p.stamp, u.username FROM posts p INNER JOIN users u ON p.user_id=u.user_id WHERE p.user_id='$userid' ORDER BY p.stamp DESC";

【讨论】:

    【解决方案2】:

    您可以使用表名来选择列。例如:

    $Query = "select table1.body, table1.stamp, users.username from posts, users where user_id = '$userid' order by stamp desc";
    

    但是,这种方法性能不好。

    最好的方法是:

    $Query = "SELECT table1.body, table1.stamp, users.username 
    FROM posts 
    INNER/LEFT/RIGHT JOIN users 
    ON users.user_id = '$userid' AND users.user_stamp = stamp.stamp_id
    

    所有表都必须相关。

    您好,

    【讨论】:

      【解决方案3】:
      $sql = "select body, stamp from posts , username from users where user_id = '$userid' order by stamp desc";
      

      我刚刚更正了您查询中的语法错误...即 AND 关键字应替换为 ,

      【讨论】:

      • 这将产生一个笛卡尔积,比预期的要多得多。您需要两个表之间的连接条件,并且隐式连接语法(逗号分隔的表)是旧的并且计划弃用。
      【解决方案4】:
      $sql = "
      select body, stamp from posts where user_id = '$userid' order by stamp desc
      UNION ALL
      select body, stamp from username where user_id = '$userid' order by stamp desc
      ";
      

      http://dev.mysql.com/doc/refman/5.0/en/union.html

      【讨论】:

        【解决方案5】:

        你应该使用别名或表名来避免这样的重复问题

        tablename.column
        

        alias.column
        

        您可以在 where 子句中设置别名:

        FROM table as alias_name
        

        【讨论】:

          【解决方案6】:
          $sql = "SELECT p.body,p.stamp,u.username from posts p LEFT JOIN users as u ON (p.user_id = u.user_id) WHERE user_id = '$user_id' ORDER BY p.stamp DESC";
          

          应该这样做

          【讨论】:

            【解决方案7】:

            试试这个:

            select body, stamp, username 
            from posts p JOIN users a ON p.user_id = a.user_id 
            WHERE p.user_id = '$userid' order by stamp desc
            

            【讨论】:

              【解决方案8】:

              这应该可以正常工作:

              SELECT posts.body, posts.stamp, users.username 
              FROM posts, users 
              WHERE posts.user_id = '$userid' AND posts.user_id = users.user_id
              ORDER BY posts.stamp DESC
              

              【讨论】:

                【解决方案9】:
                 select body, stamp, username 
                    from posts,users 
                    where users.user_id = post.user_id 
                        and users.user_id = '$userid' 
                    order by stamp desc;
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2014-01-28
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-02-22
                  • 1970-01-01
                  • 2011-02-21
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多