Доброго времени суток!
Начинаю создавать свой первый каталог для магазина. Существует куча подкаталогов. Хочу упростить запрос для вывода строки навигации в каталоге но не хватает опыта.
вот код запроса к БД
PHP |
$result_cat = mysql_query("SELECT id,name FROM shop_groups WHERE parent='0'"); |
Цитата |
Хочу упростить запрос для вывода строки |
Цитата (glock18 @ 5.06.2009 - 04:45) |
Сейчас так идет выборка: 1. собрал самую старшую категорию. 2. в цикле для каждой из категорий по запросу на ее потомков. 3. для каждого из потомков то же самое Жээээсть - три вложенных цикла с запросами на каждой итерации Тут уже огромное количество таких тем. Смотри использрование IN в запросах. |
PHP |
$result_cat = mysql_query("SELECT id,name,parent FROM shop_groups"); |
PHP |
$result_cat = mysql_query("SELECT id,name,parent FROM shop_groups"); |
SQL |
SELECT t.id AS tid, t.name AS tname FROM ta_category t LEFT JOIN ta_category t1 ON t.parent_id = t1.id LEFT JOIN ta_category t2 ON t1.parent_id = t2.id LEFT JOIN ta_category t3 ON t2.parent_id = t3.id WHERE t.id = 77; |
SQL |
LEFT JOIN ta_category tn ON t(n-1).parent_id = tn.id |
SQL |
SELECT t.id AS tid, t.name AS tname, t.parent AS tparent FROM shop_groups t LEFT JOIN shop_groups t1 ON t.parent = t1.id LEFT JOIN shop_groups t2 ON t1.parent = t2.id LEFT JOIN shop_groups t3 ON t2.parent = t3.id WHERE t.id =64 LIMIT 0, 30 |
SQL |
tid tname tparent 64 мешки 58 |
SQL |
SELECT t.id AS tid, t.name AS tname, t.parent AS tparent |
Цитата |
в запрос не надо вписывать каждый из уровней? |
SQL |
SELECT t.id AS tid, t.name AS tname, t.parent AS tparent t1.id AS t1id, t1.name AS t1name, t1.parent AS t1parent t2.id AS other_id, t2.name AS somename, t.parent AS ... |
SQL |
$resultta = mysql_query(" SELECT t.id AS tid, t.name AS tname, t.parent AS tparent, t1.id AS tida, t1.name AS tnamea, t1.parent AS tparenta, t2.id AS tidb, t2.name AS tnameb, t2.parent AS tparentb, t3.id AS tidc, t3.name AS tnamec, t3.parent AS tparentc FROM shop_groups t LEFT JOIN shop_groups t1 ON t.parent=t1.id LEFT JOIN shop_groups t2 ON t1.parent=t2.id LEFT JOIN shop_groups t3 ON t2.parent=t3.id WHERE t.id=$cat"); $rowta = mysql_fetch_array($resultta); if($rowta['tidc'] != 0){$nav[] = array($rowta['tidc'], $rowta['tnamec'], "/catalog/".$rowta['tidc'].".html");} if($rowta['tidb'] != 0){$nav[] = array($rowta['tidb'], $rowta['tnameb'], "/catalog/".$rowta['tidb'].".html");} if($rowta['tida'] != 0){$nav[] = array($rowta['tida'], $rowta['tnamea'], "/catalog/".$rowta['tida'].".html");} if($rowta['tid'] != 0){$nav[] = array($rowta['tid'], $rowta['tname'], "/catalog/".$rowta['tid'].".html");} $navigation = "<table cellpadding=\"0\" cellspacing=\"0\"><tr><td><a href='/'>Главная</a></td>"; for($i=0; $i<count($nav); $i++){ if($focus !== $nav[$i][0]) {$navigation .= "<td width=\"29\"><img src=\"/templates/images/style_img_1/ico/arst.gif\" width=\"29\" height=\"15\" alt=\"\" /></td><td><a href='".$nav[$i][2]."'>".$nav[$i][1]."</a></td>"; } else { $navigation .= "<td width=\"29\"><img src=\"/templates/images/style_img_1/ico/arst.gif\" width=\"29\" height=\"15\" alt=\"\" /></td><td><h1>".$nav[$i][1]."</h1></td>"; } }$navigation .= "</tr></table>"; echo $navigation; |
Цитата (glock18 @ 7.06.2009 - 16:25) |
Да, конечно. Здесь оно даже проще, чем было бы у тебя. В идеале этот запрос и выборку делать отдельной функцией, которая по переданному параметру "глубина" формировала бы и запрос, и выходные данные без привязки к каким-то числам. |
PHP |
$catalog = mysql_query("SELECT * FROM shop_groups WHERE id='".$cat."' "); |
PHP |
function GetCategoriesBreadCrumbs($categoryID, $currentItem, $depth = 3) |
PHP |
<table cellpadding="0" cellspacing="0"> |
PHP |
$categoryID = 15; // нужная категория |
Цитата (Shurick @ 9.06.2009 - 08:09) |
Доходчиво, профессионально |