【问题标题】:Displaying one table data with respect to other table显示一个表数据相对于另一表
【发布时间】:2015-11-04 10:58:32
【问题描述】:

我被这个问题困住了。我有 2 张桌子,InvoiceInvoice_Lines。我想以这样一种方式显示我的表格,即Invoice 行应该显示在它们各自的发票下方。这是我的代码:

$queryString = "SELECT * FROM Invoice";
        $roql_result_set = RightNow\Connect\v1_2\ROQL::query($queryString);

        echo "<table class=\"responstable\"><tr><th>ID</th><th>Account</th><th>Contact</th><th>Display Order</th><th>Date Created</th><th>Date Updated</th></tr>"; 
        while($roql_result = $roql_result_set->next())
        {
            while ($row = $roql_result->next())
            {   
                $lines = "SELECT * FROM Invoice_lines";
                $result_set = RightNow\Connect\v1_2\ROQL::query($lines);
                while($result = $result_set->next())
                {
                    while ($line = $result->next())
                    {                       
                        echo "<tr><td><a href=\"#\">" . $line['ID'] ."</a></td><td><a href=\"#\">" . $line['Invoice'] . "</a></td><td>" . $line['Line_Number'] ."</td><td>" . $line['DisplayOrder'] . "</td></tr>"; 

                        $ctime = date('F j, Y' , strtotime($row['CreatedTime']));
                        $utime = date('F j, Y' , strtotime($row['UpdatedTime']));

                        echo "<tr><td><a href=\"#\">" . $row['ID'] ."</a></td><td><a href=\"#\">" . $row['Account'] . "</a></td><td>" . $row['Contact'] ."</td><td>" . $row['DisplayOrder'] ."</td><td>" . $ctime ."</td><td>" .$utime. "</td></tr>";  
                    }
                }

            }
        }
        echo "</table>"; 

【问题讨论】:

  • 你能显示你预期的输出格式吗?
  • 我在上面添加了当前输出的图像。我希望这 2 个表显示在一个表中。请检查我的图片问题。
  • 首先学习如何在sql中使用join来连接2个表。然后遍历包含两个表中数据的单个数据集。
  • 这不像我们在 Mysql 或 phpmyadmin 中所做的那样,。这是oracle right CX中的对象设计器,普通Mysql不行,我这里用的是ROQL。
  • 格式和语法

标签: php oracle rightnow-crm roql


【解决方案1】:

您需要在此处使用 JOIN 查询来构造一个包含两个表中的内容的结果集。像这样的查询将为您解决问题

SELECT Invoice.*, Invoice_lines.* 
  FROM Invoice
  LEFT JOIN Invoice_lines ON Invoice.ID = Invoice_lines.Invoice
   ORDER BY Invoice.Display_order, Invoice_lines.Display_order

但是,请不要将此查询视为魔法。相反,学习如何使用 SQL 的这一核心特性。

【讨论】:

    【解决方案2】:

    尝试这样做,

    SELECT Invoice.*, Invoice_lines.* 
      FROM Invoice
      LEFT JOIN Invoice_lines ON Invoice.ID = Invoice_lines.Invoice
       ORDER BY Invoice.Display_order, Invoice_lines.Display_order
    

    【讨论】:

      【解决方案3】:

      您没有通过 OSvC 或其 API 接触过 MySQL。应该从问题中删除该标签。这个问题是针对OSvC(Oracle 服务云)和ROQL,这是特定于应用程序层的,而不是特定于数据库的。

      如果您通过对象设计器中的关系将表连接为父子关系,那么您将使用 ROQL 连接语法,即explained in detail in the docs。使用 ROQL 时,联接是隐含的内部联接,但您也可以设置外部联接。假设您想要获取联系人 1234 的所有发票行,并且您的 Invoice 对象具有 Contact 关系和标题为 Invoice_lines 的关系,那么 queryCSV 将如下所示:

      SELECT I.ID as InvoiceID, I.Invoice_lines.* FROM Invoice I WHERE I.Contact = 1234
      

      查询对象(queryObject 方法)语法会略有不同,因为您没有指定列,但我会在您的情况下使用查询,因为您以表格格式输出数据:

      SELECT I, Invoice_lines FROM Invoice I WHERE I.Contact = 1234
      

      您需要考虑逻辑中的 10,000 行限制;如果您打算在一个页面上显示超过 10k 行,则可能需要一个循环来遍历结果。

      此外,您在示例中似乎正在合并视图和控制器代码。这是不好的做法。您应该从模型执行查询,将查询结果返回给控制器以传递给视图。该视图将简单地遍历结果数组以显示您的表格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-30
        • 2012-12-05
        • 2016-11-25
        • 1970-01-01
        • 2022-12-31
        • 1970-01-01
        相关资源
        最近更新 更多