Использование формы для отображения всех записей, где определенное значение больше X - PullRequest
0 голосов
/ 25 апреля 2019

Для этой проблемы мне нужно создать страницу PHP, где пользователь может искать таблицу счетов, вводя значение «количество».Затем форма берет это количество и выдает таблицу с именем, номером счета-фактуры, количеством и описанием позиции для всех счетов-фактур, количество которых превышает количество, отправленное пользователем.

По большей части у меня есть страницанастроен и работает нормально.Я застреваю на стороне запроса - в частности, код ниже предоставляет мне список счетов, где количество идентично вводимому количеству.

Я пытался изменить "ГДЕ ii.quantity LIKE?"на "ГДЕ ii.количество>?"но все, что мне нужно, это предоставить мне список всех счетов без фильтрации по количеству отправленных пользователем.

    $query = 
    "SELECT c.first_name, c.last_name, ii.invoice_id, ii.quantity, it.description
     FROM `c2092`.`customer` c
     JOIN `c2092`.`invoice` i ON c.customer_id = i.customer_id
     JOIN `c2092`.`invoice_item` ii ON ii.invoice_id = i.invoice_id
     JOIN `c2092`.`item` it ON it.item_id = ii.item_id
     WHERE ii.quantity LIKE ?
     ORDER BY ii.invoice_id";

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Это слишком сложный запрос. Постарайтесь объяснить это. Я уверен, что он будет использовать сортировку файлов и даже временную таблицу.

Лучше всего сделать несколько запросов:

$invoiceItems = $db->query(
"SELECT ii.invoice_id, ii.id, ii.quantity, it.description
 FROM `c2092`.`invoice_item` ii
 JOIN `c2092`.`item` it ON it.item_id = ii.item_id
 WHERE ii.quantity > ?
 ORDER BY ii.invoice_id");

$invoiceItemMap = [];
$invoiceIds = [];
foreach ($invoiceItems as $invoiceItem) {
   $invoiceItemMap[$invoiceItem['invoice_id']][] = $invoiceItem;
   $invoiceIds[$invoiceItem['invoice_id']] = $invoiceItem['invoice_id'];
}
$invoiceIds = array_values($invoiceIds);

$userInvoices = $db->query(
"SELECT c.first_name, c.last_name, i.invoice_id
 FROM `c2092`.`invoice` i
 JOIN `c2092`.`customer` c ON c.customer_id = i.customer_id
 WHERE i.id IN (".implode(',', $invoiceIds).")");

$result = [];
foreach ($userInvoices as $row) {
  $result[] = array_merge($row, $invoiceIds[$row['invoice_id']]);
}
0 голосов
/ 26 апреля 2019

Здравствуйте,

Каково значение вашей переменной?

Предпочитаете использовать именованный параметр вместо? синтаксис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...