datatable — как получить данные свойств продукта иерархии в столбцах html-таблицы, используя php / mysql?

это наша (mysql) структура базы данных и данные:

Товары:

id  |  title
1   |  samsung galaxy
2   |  iphone

Propertise: (примечание: parent Propertise имеет parent_id = 0)

id  |  title             | parent_id
1   | screen             |    0
2   | screen size        |    1
3   | screen resolution  |    1

Products_Propertise:

id  |  products_id   |  propertise_id | value
1   |      1         |       1        |  null
2   |      1         |       2        |  5 inch
3   |      1         |       3        |  500 ppi
4   |      2         |       1        |  null
5   |      2         |       2        |  4.2 inch
6   |      2         |       3        |  330 ppi

поэтому нам нужен этот вывод HTML:

<table>
<tr>
<td> Products : </td>
<td> samsung galaxy  </td>
<td> iphone  </td>
</tr>

<tr class="parent_Propertise">
<td> screen : </td>
<td>  null </td>
<td>  null </td>
</tr>

<tr>
<td> screen size : </td>
<td>  5 inch </td>
<td>  4.2 inch</td>
</tr>
<tr>
<td> screen resolution : </td>
<td>  500 ppi </td>
<td>  330 ppi</td>
</tr>
</table>

я получил данные в массив () с помощью этого кода запроса MySQL:

 SELECT Products.name, Products_Propertise.value,Propertise.id,Propertise.title,Propertise.parent_id
FROM Products_Propertise
JOIN Propertise ON Products_Propertise.propertise_id=Propertise.id
JOIN Products ON Products_Propertise.products_id=Products.id
WHERE  Products_Propertise.products_id=1 OR Products_Propertise.products_id=2

и я использовал эту рекурсивную функцию, чтобы показать данные в HTML-таблице:

<?php
//index elements by id
foreach ($resutls as $item) {
$item['subs'] = array();
$indexedItems[$item['id']] = (object) $item;
}
//assign to parent
$topLevel = array();
foreach ($indexedItems as $item) {
if ($item->parent_id == 0) {
$topLevel[] = $item;
} else {
$indexedItems[$item->parent_id]->subs[] = $item;
}
}
//recursive function
function renderMenu($items) {
$render = "";
$i=0;
foreach ($items as $item) {
if(!empty($item->subs))
{
$i++;
$render .= "<tr class='parent_Propertise'><td>".$item->title."</td><td></td></tr>";
}else{
$render .= "<tr><td>".$item->title."</td><td>".$item->value."</td></tr>";
}

if (!empty($item->subs))
{
$render .= renderMenu($item->subs);
}

}//end foreach
return $render;
}

echo "<table><tr><td>Products :<td>";
foreach ($resutls as $item) {
echo "<td>".$item['name']."<td>";
}
echo "</tr>";
echo renderMenu($topLevel);
echo "</table>";
?>

но окончательный вывод не то, что мы хотим !! Может кто-нибудь мне помочь?

0

Решение

Одна проблема в том, что вы не извлекаете данные из результатов

$resutls = mysqli_query($con,$query);

$resutls это mysqli_result объект, не массив. Ты делаешь это

foreach ($resutls as $item) {

Вместо этого вам нужно while петля

while($item = $resutls->fetch_assoc()) {

Или процедурный

while($item = mysqli_fetch_assoc($resutls)) {
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector