【问题标题】:I'm stuck on 'merging' tables我被困在“合并”表上
【发布时间】:2018-05-30 23:36:35
【问题描述】:

我只是试图通过配对行来合并表,例如: cw_users.userid = sold.buyer_id

我想显示他们购买了哪些软件包(vps、域、托管)。

Here's a screen of my tables

这是我的代码。 希望能帮到你

编辑:我忘了说我还需要使用$_SESSION['id'],它将与 cw_users.userid 链接

<?php
            //connect.php
            $server     = 'localhost';
            $username   = 'myusernamenotyours';
            $password   = 'mypassnotyours';
            $database   = 'mydatabasenotyours';

            if(!mysql_connect($server, $username, $password))
            {
                exit('Error: could not establish database connection');
            }
            if(!mysql_select_db($database))
            {
                exit('Error: could not select the database');
            }

            $sql = "SELECT sold.*, vps_packages.*
                    FROM sold, vps_packages
                    WHERE sold.bought_vps = vps_packages.id ";

                $result = mysql_query($sql);

                if(!$result)
                {
                    echo 'De packages kunnen niet worden geladen';
                }
                else
                {
                    if(mysql_num_rows($result) == 0)
                    {
                        echo 'Er zijn nog geen packages, probeer het later nog eens.';
                    }
                    else
                    {
                        //prepare the table
                        echo '<table>';

                        while($row = mysql_fetch_assoc($result))
                        { 
                            echo '<li>' . sold.bought_vps .  ' </li>';
                        }
                    }
                }
            echo '</table>';
        ?>

【问题讨论】:

标签: php mysql html-table


【解决方案1】:

你的时间应该是这样的:

while($row = mysql_fetch_assoc($result))
{ 
  echo '<tr><td>' . $row['bought_vps'] .  ' </td></tr>';
}

你也应该echo '&lt;table&gt;',即使你的查询失败,它也会被回显,否则你的页面将无法正确显示。

但在进一步编写/编码之前,停止,倾听并思考

  1. 您正在使用旧的已弃用危险mysql_* 扩展。请参阅对您的问题的评论以了解替代方案
  2. 您正尝试在 MySQL 中使用 PHP 中的同名调用定义为 bought_vps 的值。这没有任何意义。没有$ 调用的变量是全局变量,我很确定您不会尝试在代码中的那个位置回显全局变量。

你应该知道这一点

这意味着您应该真正考虑遵循简单的教程来学习基础知识。如果这对您来说确实是个问题,那么您应该在进一步学习之前获得更多技能。

【讨论】:

  • 到目前为止,我只使用更简单的 SQL 查询。因为选择了 2 个表,所以使用 $row 对我来说没有任何意义。无论如何,它有效。非常感谢。
【解决方案2】:
while($row = mysql_fetch_assoc($result))
{ 
 echo '<li>' . sold.bought_vps .  ' </li>';
}

您应该将 $row 视为连接表的当前迭代行 所以如果你把 print_r($row),你会看到所有的数据在行。

其他 SQL:

SELECT * FROM sold
INNER JOIN vps_packages ON sol.bougth_vps = vps_packages.id 

【讨论】:

  • 您的 SQL 有一个额外的逗号和一个错字。这也只是对他现有 SQL 的重写。我错过了什么吗?我没有看到这个答案增加了什么?
  • 我认为sold.bought_vps 在 PHP 中根本无法工作。
  • 它显示相同:“soldbought_vps”,这不是我想要的。不过还是谢谢。
  • 这只是一个例子,您应该在 Where 和比较 id 上使用 join 代替。
  • 在这种情况下,他们正在做同样的事情(用 EXPLAIN 测试它)。加入只是让什么是加入逻辑和什么是过滤逻辑(对于大多数人)更清楚。他的 SQL 仍然完全有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 2022-11-10
相关资源
最近更新 更多