Я застрял в этой проблеме. У меня есть 2 таблицы, Invoice
и Invoice_Lines
. Я хочу, чтобы отобразить свою таблицу таким образом, что Invoice
- 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>";
Попробуйте сделать это,
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
Вы должны использовать 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.
У вас нет доступа к MySQL через OSvC или его API. Этот тег следует удалить из вопроса. Вопрос специфичен для OSvC
(Oracle Service Cloud) и ROQL
, который является спецификацией прикладного уровня, а не специфичной для базы данных.
Если у вас есть таблицы, объединенные в конструкторе объектов как родительский и дочерний, то вы должны использовать синтаксис соединения ROQL, который подробно объясняется в документах. Соединения подразумеваются внутренними объединениями при использовании ROQL, но вы также можете установить внешние соединения. Предполагая, что вы хотите получить все строки счетов для контакта 1234, а ваш объект счета-фактуры имеет отношение " Contact
и отношение " Invoice_lines
, тогда queryCSV будет выглядеть примерно так:
SELECT I.ID as InvoiceID, I.Invoice_lines.* FROM Invoice I WHERE I.Contact = 1234
Синтаксис Query Object (queryObject
method) будет немного отличаться, поскольку вы не укажете столбцы, но я бы использовал запрос в вашем случае, поскольку вы выводите данные в табличном формате:
SELECT I, Invoice_lines FROM Invoice I WHERE I.Contact = 1234
Вы должны будете учитывать ограничение в 10 000 строк в своей логике; вам может понадобиться цикл, в котором страницы будут отображаться, если вы намереваетесь отображать более 10 тыс. строк на странице.
Кроме того, похоже, что вы объединяете представление и код контроллера в своем примере. Это плохая практика. Вы должны выполнять свои запросы с модели, возвращая результаты вашего запроса контроллеру, чтобы перейти к представлению. Представление просто перебирает массив результатов для отображения вашей таблицы.