|
|
|
สอบถามเรื่องการ loop ข้อมูลมาแสดงในรูปแบบตาราง กรณีหัวตารางของแต่ละข้อมูลไม่เหมือนกัน |
|
|
|
|
|
|
|
// product ตารางสินค้า
// product_header ตารางหัวตารางสินค้า
// product_header_desc ตารางที่เก็บข้อมูลว่าสินค้านี้มีหัวตารางอะไรบ้าง
--- product_header_desc.headerId = product_header.id
--- product_header_desc.productId = product.id
// product_header_details ตารางที่เก็บข้อมูลย่อยของหัวตาราง
--- product_header_details.headerDescId = product_header_desc.id
Code (PHP)
<table class="table table-bordered f-s-12">
<?php
$pId = 1;
$qHeader = $connect->prepare("SELECT phd.id phdId, phd.productId phdProductId, phd.headerId phdHeaderId,
ph.nameTH phNameTH, ph.nameENG phNameENG
FROM product_header_desc phd
JOIN product_header ph ON phd.headerId = ph.id
WHERE phd.productId = ?");
$qHeader->bind_param('i', $pId);
$qHeader->execute();
$qHeader->bind_result($phdId, $phdProductId, $phdHeaderId, $phNameTH, $phNameENG);
$qHeader->store_result();
$nHeader = $qHeader->num_rows;
$idHeader = [];
if ($nHeader > 0) { ?>
<tr>
<?php while ($qHeader->fetch()) {
$idHeader[] = $phdId; ?>
<th><?= $phNameTH ?></th> <!-- Header table -->
<?php } ?>
</tr>
<?php } ?>
<?php
$im = implode(',', $idHeader);
$ex = explode(',', $im);
for ($i = 0; $i < $nHeader; $i++) { ?>
<tr>
<?php $qDesc = $connect->prepare("SELECT phdt.id phdtId, phdt.headerDescId phdtHeaderDescId,
phdt.details phdtDetails
FROM product_header_details phdt
JOIN product_header_desc phd ON phdt.headerDescId = phd.id
WHERE phdt.headerDescId = ?");
$qDesc->bind_param('i', $ex[$i]);
$qDesc->execute();
$qDesc->bind_result($phdtId, $phdtHeaderDescId, $phdtDetails);
$qDesc->store_result();
$nDesc = $qDesc->num_rows;
if ($nDesc > 0) {
while ($qDesc->fetch()) { ?>
<td><?= $phdtDetails ?></td> <!-- Data table -->
<?php } ?>
<?php } ?>
</tr>
<?php } ?>
</table>
ตอนนี้ที่ query ออกได้แบบนี้ครับ
แบบที่ถูกต้อง
ซึ่งการเรียงยังผิดอยู่
พอจะมีวิธีไหนบ้างครับ ต้องเช็ค tr td ยังไง
รบกวนแนะนำวิธีการทีครับ
ขอบคุณครับ
Tag : PHP, MySQL
|
ประวัติการแก้ไข 2016-07-26 09:04:30
|
|
|
|
|
Date :
2016-07-25 18:05:06 |
By :
mrJ4m3 |
View :
1447 |
Reply :
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ปรับเป็น
<tr><td></td></tr> ครับ
|
|
|
|
|
Date :
2016-07-26 09:24:22 |
By :
Dragons_first |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
td มันมี 3 ช่องก็ใส่ให้ครบครับ
|
|
|
|
|
Date :
2016-07-26 09:47:35 |
By :
Dragons_first |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลงโค๊ดล่าสุดครับ รู้สึกคุณจะครอบมันผิดหรือเปล่าคับ
|
|
|
|
|
Date :
2016-07-26 10:21:12 |
By :
Dragons_first |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 5 เขียนโดย : Dragons_first เมื่อวันที่ 2016-07-26 10:21:12
รายละเอียดของการตอบ ::
จากโค้ดเดิมผมลบ <tr> บรรทัดที่ 33 และ </tr> บรรทัด 51 ออก แล้วมาใส่ใน loop while ด้านใน loop for ครับ
ด้านล่างเป็นโค้ดปัจจุบันครับ
Code (PHP)
<table class="table table-bordered f-s-12">
<?php
$pId = 1;
$qHeader = $connect->prepare("SELECT phd.id phdId, phd.productId phdProductId, phd.headerId phdHeaderId,
ph.nameTH phNameTH, ph.nameENG phNameENG
FROM product_header_desc phd
JOIN product_header ph ON phd.headerId = ph.id
WHERE phd.productId = ?");
$qHeader->bind_param('i', $pId);
$qHeader->execute();
$qHeader->bind_result($phdId, $phdProductId, $phdHeaderId, $phNameTH, $phNameENG);
$qHeader->store_result();
$nHeader = $qHeader->num_rows;
$idHeader = [];
if ($nHeader > 0) { ?>
<tr>
<?php while ($qHeader->fetch()) {
$idHeader[] = $phdId; ?>
<th><?= $phNameTH ?></th>
<?php } ?>
</tr>
<?php } ?>
<?php
$im = implode(',', $idHeader);
$ex = explode(',', $im);
for ($i = 0; $i < $nHeader; $i++) { ?>
<?php $qDesc = $connect->prepare("SELECT phdt.id phdtId, phdt.headerDescId phdtHeaderDescId,
phdt.details phdtDetails
FROM product_header_details phdt
JOIN product_header_desc phd ON phdt.headerDescId = phd.id
WHERE phdt.headerDescId = ?");
$qDesc->bind_param('i', $ex[$i]);
$qDesc->execute();
$qDesc->bind_result($phdtId, $phdtHeaderDescId, $phdtDetails);
$qDesc->store_result();
$nDesc = $qDesc->num_rows;
if ($nDesc > 0) {
while ($qDesc->fetch()) { ?>
<tr><td><?= $phdtDetails ?></td></tr>
<tr><td><?= $phdtDetails ?></td></tr>
<tr><td><?= $phdtDetails ?></td></tr>
<?php } ?>
<?php } ?>
<?php } ?>
</table>
|
|
|
|
|
Date :
2016-07-26 10:36:42 |
By :
mrJ4m3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็ใส่ผิดจริงๆนั่นแหละ
while ($qDesc->fetch()) { ?>
<tr><td><?= $phdtDetails ?></td><td><?= $phdtDetails ?></td><td><?= $phdtDetails ?></td></tr>
<tr><td><?= $phdtDetails ?></td><td><?= $phdtDetails ?></td><td><?= $phdtDetails ?></td></tr>
<tr><td><?= $phdtDetails ?></td><td><?= $phdtDetails ?></td><td><?= $phdtDetails ?></td></tr>
<?php } ?>
|
|
|
|
|
Date :
2016-07-26 10:40:44 |
By :
Dragons_first |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอโทษทีนะ ผมไม่ได้อ่านหัวข้อ อันนี้สำคัญเลยทำให้การสื่อสารกันผิด จริงๆแล้วตรงนี้มันอยู่ที่คุณคิวรี่มากกว่าครับ ผมเข้าใจผิดคิดว่าทำแสดงผลแล้วลูปมาไม่ถูกต้อง
เมื่อดูที่การออกแบบฐานข้อมูลแล้วรู้สึกได้ว่ามันไม่ถูกต้อง ถ้าจะทำการลูปข้อมูลแบบนี้ข้อมูลมันต้องแยกตารางกันครับ แล้วใช้ inner join เข้ามาช่วย (ตามรูปที่ 4 ) แต่ถ้าหากมันเป็นข้อมูลชุดเดียวกัน ก็ให้ทำฟิลด์เพิ่มต่อจาก detail เพื่อเก็บ ค่า A ค่า เงิน
ทีนี้มันจะมาเป็นแบบนี้
id detail tab-a price
พอจะมองออกไหมครับ จริงๆผมไม่รู้หรอกว่าคุณออกแบบฐาานข้อมูลมาแบบนี้เพื่อจุดประสงค์อะไร ลองอธิบายมาครับ
|
|
|
|
|
Date :
2016-07-26 10:57:03 |
By :
Dragons_first |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำได้แล้วครับ ขอบคุณ คุณ หมาของเซสชั่น มากๆ ครับ
|
|
|
|
|
Date :
2016-07-26 14:29:51 |
By :
mrJ4m3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|