помогите оптимизировать запрос

Статус
В этой теме нельзя размещать новые ответы.

ghostik32

Создатель
Регистрация
26 Янв 2010
Сообщения
40
Реакции
1
хотелось бы чтобы это был один запрос а не 40+ как сейчас у меня.
Вот сам скрипт:
PHP:
$_RES = $db->query ("SELECT nameCategories,idSubCat,link FROM `categories` ORDER BY nameCategories");

$navigation = "<ul id='navmenu'>\n";

while ($_ROW = $db->fetch_array ($_RES))
{
	$navigation .= "<li><a href='" . $_ROW['link'] . "'>" . $_ROW['nameCategories'] . "</a>\n";

	if ($_ROW['idSubCat'] > 0)
	{
		$_RES_subCat = $db->query ("SELECT nameSubCategories,link FROM `subCategories` WHERE id = '" . $_ROW['idSubCat'] . "' ORDER BY nameSubCategories");
		
		$navigation .= "<ul>\n";
		
		while ($_ROW_subCat = $db->fetch_array ($_RES_subCat))
		{
			$navigation .= "<li><a href=\"" . $_ROW_subCat['link'] . "\">" . $_ROW_subCat['nameSubCategories'] . "</a></li>\n";
		}
		
		$navigation .= "</ul>\n";
	}
	
	$navigation .= "</li>\n";
}

$navigation .= "</ul>\n";
 
что сразу бросается в глаза, $_RES_subCat стоит вынести за while, загрузить туда полностью таблицу, а потом делать из этого массива выборку для каждой категории.
 
  • Заблокирован
  • #3
Советую категории и субкатегории держать в одной таблице
примерная структура

PHP:
CREATE TABLE IF NOT EXISTS `content_groupe` (
  `id_groupe` int(11) NOT NULL AUTO_INCREMENT,
  `name_groupe` varchar(255) NOT NULL,  
  `parent` int(11) NOT NULL,
  PRIMARY KEY (`id_groupe`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251;


Если parent равно 0 это родительская категория
Если parent равен скажем 1 то это субкатегория принадлежащая родительской с id_groupe равным 1


при выводе смотрим если parent не равен 0 то это субкатегрия и ставим нужные теги, если равен то это родительская.

Если так не понятно могу еще кусок кода скинуть как это ввести
 
Советую категории и субкатегории держать в одной таблице
примерная структура
PHP:
CREATE TABLE IF NOT EXISTS `content_groupe` (
  `id_groupe` int(11) NOT NULL AUTO_INCREMENT,
  `name_groupe` varchar(255) NOT NULL,  
  `parent` int(11) NOT NULL,
  PRIMARY KEY (`id_groupe`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251;
Если parent равно 0 это родительская категория
Если parent равен скажем 1 то это субкатегория принадлежащая родительской с id_groupe равным 1
при выводе смотрим если parent не равен 0 то это субкатегрия и ставим нужные теги, если равен то это родительская.
Если так не понятно могу еще кусок кода скинуть как это ввести
Если можеш скинь, посмотрю. А как вытащить все данные из таблицы?
запрос типо
PHP:
$a = mysql_query ("select * from `s`"); 
$b = mysql_fetch_array ($a);
вытащить только одну строку из таблицы в которой ещё строк 200.
 
PHP:
SELECT  subCategories.nameSubCategories as s_name, categories.nameCategories as dir_name
FROM
 subCategories
  INNER JOIN categories ON ( subCategories.id =  categories.idSubCat) 
ORDER BY  categories.nameCategories, subCategories.nameSubCategories
Поля выборки добавляешь сам
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху