显示相对于其他表的一个表数据

时间:2015-11-04 10:58:33

标签: php oracle rightnow-crm roql

enter image description here

我遇到了这个问题。我有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>"; 

3 个答案:

答案 0 :(得分:1)

您需要在此处使用JOIN查询来构造包含两个表中内容的单个结果集。像这样的查询将为您提供诀窍

async {
    let! request = Http.AsyncRequestStream(logoUrl)
    use outputFile = new System.IO.FileStream(fileName,System.IO.FileMode.Create)
    do! request.ResponseStream.CopyToAsync( outputFile ) |> Async.AwaitTaskVoid 
} |> Async.RunSynchronously

但是,请不要将此查询视为魔法咒语。相反,学习如何使用SQL的这个核心功能。

答案 1 :(得分:0)

您不会通过OSvC或其API接触MySQL。应该从问题中删除该标记。该问题特定于OSvC(Oracle Service Cloud)和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行,则可能需要一个遍历结果的循环。

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

答案 2 :(得分:0)

尝试这样做,

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