У меня есть категории и подкатегории в моей базе данных. Таблица базы данных содержит «cid», «pid» и «cname» coloums.
Идентификатор Cid = Категории
Pid = Если Категория является Подкатегорией, то Pid =, которые принадлежат какой категории.
Cname = Название категории
Для примера Программное обеспечение – это категория и id = 15, а «Программное обеспечение IOS – это подкатегория и id = 30 и pid = 15
Теперь я хочу показать этого Кота. И Sub-Cat в таблице. Вот мой код
<?php function categories() { $categorysql = $DB['DB_Database']->query("SELECT cid, pid, cname FROM categories GROUP BY cid"); while ($row = $DB['DB_Database']->fetch_assoc($categorysql)) { if ($row['pid'] > 0 { } else { $catid = $row['cid']; $catname = $row['cname']; } }
с этим кодом я могу показать только основные категории. Примеры фото здесь;
Но я хочу показать это;
Мой код таблицы выглядит следующим образом:
<table width="268" border="1"> <tr> <td width="52" rowspan="2" valign="top">Image</td> <td width="200" height="23"><a href="{$catid}">{$catname}<a></td> </tr> <tr> <td height="36" valign="top">This ara for sub cat.</td> </tr> </table>
Итак, как я могу это сделать, любая идея?
Я бы предложил изменить ваш PHP-код для работы со следующим sql, который использует OUTER JOIN
:
select c.cname, c2.cname subname from categories c left join categories c2 on c.cid = c2.pid where c.pid is null
Это предполагает, что поле pid родителя равно null. В качестве альтернативы вы можете использовать GROUP_CONCAT
для возврата всех ваших подкатегорий в одну строку вместо нескольких строк – это может быть проще для вашей реализации.
Для более простой реализации вы можете сделать два запроса
Это даст все категории. (Пусть говорят, что корневая категория pid будет равна 0
SELECT name FROM categories where pid = 0
В этом цикле используйте второй запрос
SELECT name FROM categories where pid = $catId
Вот пример кода php для заполнения массива, который вы можете использовать
function runQuery ($ sql) {
global $DB; $dbResource = $DB['DB_Database']->query($sql); $rows = array(); while ($row = $DB['DB_Database']->fetch_assoc($dbResource)) { $rows[] = $row; } return $rows; } function getSubCat($pid) { subCategorySql = "SELECT name FROM categories where pid = "+ $pid; return runQuery($subCategorySql); } $categorySql = "SELECT name FROM categories where pid = 0" $categories = runQuery(categorySql) $i=0; foreach($categories as $aCat) { $categories[$i++]['sub_cat'] = getSubCat($aCat['id']); }
теперь вы можете использовать $ categories [index] ['name'] для категории и $ categories [index] ['sub_cat'] [sub_cat_index] [имя] для имени подкатегории.
Это не очень хороший подход, хотя он так часто попадает в базу данных.