Я застрял с этой проблемой. У меня есть 2 таблицы, Invoice
а также Invoice_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>";
Попробуй сделать это,
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
Объект запроса (queryObject
Синтаксис метода) будет немного другим, поскольку вы не указываете столбцы, но я бы использовал запрос в вашем случае, поскольку вы выводите данные в табличном формате:
SELECT I, Invoice_lines FROM Invoice I WHERE I.Contact = 1234
Вы должны будете учитывать ограничение в 10 000 строк в своей логике; вам может понадобиться цикл, который просматривает результаты, если вы хотите показать более 10 тысяч строк на странице.
Кроме того, похоже, что вы объединяете представление и код контроллера в своем примере. Это плохая практика. Вы должны выполнять ваши запросы из модели, возвращая результаты вашего запроса контроллеру для передачи в представление. Представление будет просто перебирать массив результатов для отображения вашей таблицы.