#php #json #mysqli
#php #json #mysqli
Вопрос:
Кто-нибудь знает о моей проблеме с моим кодом? У меня есть две таблицы: sales_details и sales_payment. Сведения о продажах, где вы можете увидеть все детали, а другая таблица предназначена для информации о платеже / транзакции. Сведения о продажах имеют первичный ключ, а таблица sales_payment имеет FK. Чтобы объединить все данные, я использовал оператор inner join .
Вот пример моих данных. Я запускаю пример запроса с помощью join . Все изображения являются результатом запроса. Я обрезал его, потому что не могу сделать длинный снимок экрана в альбомном режиме.
Подробная таблица продаж (Продолжение):
Это то, что я пробовал:
public function get_payment_info_by_id($payment_info_id) {
$query = $this->db->query("SELECT * FROM tbl_sales_details AS tsd INNER JOIN tbl_sales_payments AS tsp ON tsp.sales_id = tsd.sales_id WHERE tsd.sales_id = $payment_info_id");
echo json_encode($query->fetch_object());
}
Возвращенные данные в формате json:
Как вы можете видеть, данные в формате JSON. Он не вернул все данные в tbl_sales_payment.
Я хочу вернуть свои данные json следующим образом:
{
sales_balance: "4601.60"
sales_company: ""
sales_cp: ""
sales_date: "2021-01-12 01:26:33"
sales_discount: "0.00"
sales_dr: "5768"
sales_height: "8.00"
sales_id: "3"
sales_media: "Sticker on Sintra"
sales_net_amount: "8601.60"
sales_particulars: "Authorized Personnel Only"
sales_po: "100549"
sales_price_unit: "4.00"
sales_qty: "15.00"
sales_si: "1794"
sales_so: "1234"
sales_total: "7680.00"
sales_total_area: "128.00"
sales_unit: "in"
sales_vat: "921.60"
sales_width: "16.00"
"payments": [
{
payment_id: "3"
payment_amount: "1000.00"
payment_date: "2021-01-15"
payment_remarks: ""
},
{
payment_id: "4"
payment_amount: "1000.00"
payment_date: "2021-01-18"
payment_remarks: ""
},
{
payment_id: "5"
payment_amount: "2000.00"
payment_date: "2021-01-29"
payment_remarks: ""
}
]
}
Ответ №1:
Вуек,
попробуйте это,
public function get_payment_info_by_id($payment_info_id) {
$return_data = [];
$query = $this->db->query("SELECT * FROM tbl_sales_details AS tsd INNER JOIN tbl_sales_payments AS tsp ON tsp.sales_id = tsd.sales_id WHERE tsd.sales_id = $payment_info_id");
while ($obj = $query->fetch_object()) {
$return_data[] = $obj;
}
echo json_encode($return_data);
}
Комментарии:
1. Выглядит хорошо! Возможно ли не повторять данные в таблице sales_details, чтобы избежать избыточности?
2. Возможно, но это проще с помощью кода. Вот так,
$tsd_query = $this->db->query("SELECT * FROM tbl_sales_details WHERE sales_id=$payment_info_id"); $tsd_result = $tsd_query ->fetch_object(); $tsp_query = $this->db->query("SELECT * FROM tbl_sales_payments WHERE sales_id=$payment_info_id"); while ($obj = $tsp_query->fetch_object()) { $paymetns[] = $obj; } $tsd_result->payments = $payments; echo json_encode($tsd_result);