显示一个 table 相对于其他 table 的数据
Displaying one table data with respect to other table
我被这个问题困住了。我有 2 个 table,Invoice
和 Invoice_Lines
。我想以 Invoice
行应显示在各自发票下方的方式显示我的 table。这是我的代码:
$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>";
您需要在此处使用 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.
的核心功能
您没有通过 OSvC 或其 API 接触过 MySQL。该标签应该从问题中删除。该问题特定于 OSvC
(Oracle 服务云)和 ROQL
,这是特定于 application-layer,而不是特定于数据库。
如果您通过 object 设计器中的关系将 table 连接为 parent 和 child,那么您将使用 ROQL 连接语法,即 explained in detail in the docs。使用 ROQL 时,联接是隐含的内部联接,但您也可以设置外部联接。假设您想要获取联系人 1234 的所有发票行,并且您的发票 object 具有 Contact
关系和标题为 Invoice_lines
的关系,那么 queryCSV 将如下所示:
SELECT I.ID as InvoiceID, I.Invoice_lines.* FROM Invoice I WHERE I.Contact = 1234
查询 Object(queryObject
方法)语法会略有不同,因为您没有指定列,但我会在您的情况下使用查询,因为您以表格格式输出数据:
SELECT I, Invoice_lines FROM Invoice I WHERE I.Contact = 1234
您需要在逻辑中考虑 10,000 行的限制;如果您打算在一个页面上显示超过 10k 行,您可能需要一个循环来翻阅结果。
此外,您似乎在示例中合并了视图和控制器代码。这是不好的做法。您应该从模型执行查询,将查询结果返回给控制器以传递给视图。该视图将简单地遍历结果数组以显示您的 table.
尝试这样做,
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
我被这个问题困住了。我有 2 个 table,Invoice
和 Invoice_Lines
。我想以 Invoice
行应显示在各自发票下方的方式显示我的 table。这是我的代码:
$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>";
您需要在此处使用 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.
的核心功能您没有通过 OSvC 或其 API 接触过 MySQL。该标签应该从问题中删除。该问题特定于 OSvC
(Oracle 服务云)和 ROQL
,这是特定于 application-layer,而不是特定于数据库。
如果您通过 object 设计器中的关系将 table 连接为 parent 和 child,那么您将使用 ROQL 连接语法,即 explained in detail in the docs。使用 ROQL 时,联接是隐含的内部联接,但您也可以设置外部联接。假设您想要获取联系人 1234 的所有发票行,并且您的发票 object 具有 Contact
关系和标题为 Invoice_lines
的关系,那么 queryCSV 将如下所示:
SELECT I.ID as InvoiceID, I.Invoice_lines.* FROM Invoice I WHERE I.Contact = 1234
查询 Object(queryObject
方法)语法会略有不同,因为您没有指定列,但我会在您的情况下使用查询,因为您以表格格式输出数据:
SELECT I, Invoice_lines FROM Invoice I WHERE I.Contact = 1234
您需要在逻辑中考虑 10,000 行的限制;如果您打算在一个页面上显示超过 10k 行,您可能需要一个循环来翻阅结果。
此外,您似乎在示例中合并了视图和控制器代码。这是不好的做法。您应该从模型执行查询,将查询结果返回给控制器以传递给视图。该视图将简单地遍历结果数组以显示您的 table.
尝试这样做,
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