Селектиране от две таблици

noxious

Registered
Здравейте,
имам 2 таблици, от които едната е 'categories', а другата 'types'. Искам да направя в навигацията, която включва падащо меню да е по следния начин:

HTML:
<ul class="nav navbar-nav ">
	<li><a class="active" href="index.php">Начало</a></li>
	<li><a href="#" class="dropdown-toggle" style="background-color:#e66ba2;" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Дрехи <span class="caret"></span></a>
		<ul class="dropdown-menu">
			<li class="dropdown-submenu">
				<a href="#" class="dropdown-toggle" data-toggle="dropdown">Мъжки</a>
				<ul class="dropdown-menu">
					<li><a href="$">Тениски</a></li>
					<li><a href="#">Ризи</a></li>
				</ul>
			</li>
			<li class="dropdown-submenu">
				<a href="#" class="dropdown-toggle" data-toggle="dropdown">Женски</a>
				<ul class="dropdown-menu">
					<li><a href="#">Рокли</a></li>
					<li><a href="#">Блузи</a></li>
				</ul>
			</li>
			<li><a href="index.php">Детски</a></li>
		</ul>
	</li>
</ul>

SQL.sql
[sql]CREATE TABLE categories (
id int(11) NOT NULL auto_increment,
name varchar(50) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (id)
);

INSERT INTO `categories` (`id`, `name`) VALUES
(1, 'Мъжко'),
(2, 'Женско'),
(3, 'Детски');

CREATE TABLE types (
id int(11) NOT NULL auto_increment,
name varchar(25) COLLATE utf8_unicode_ci NOT NULL,
categorie_id int(11) NOT NULL,
PRIMARY KEY (id)
);

INSERT INTO `types` (`id`, `name`, `categorie_id`) VALUES
(1, 'Тениски', 1),
(2, 'Ризи', 1),
(3, 'Рокли', 2),
(4, 'Блузи', 2);[/sql]

Проблемът е там, че не знам как да го направя. Благодаря предварително!
 
Взимаш всички типове и категории:

[sql]SELECT categories.id as cat_id, categories.name as cat_name, types.id as type_id, types.name as type_name FROM categories JOIN types ON types.categorie_id = categories.id[/sql]

След това резултата си го минаваш с няакъв цикъл и си билдваш дървото.

Пример:

95b4ddbe27e14190839e9380be53909f.png

Това е резултата от по-горната заявка с твоята DB структура.

Да кажем, че като масив ще изглежда така:
Код:
$sqlResult = [
	[ 'cat_id' => 1, 'cat_name' => 'Мъжко', 'type_id' => 1, 'type_name' => 'Тениски'],
	[ 'cat_id' => 1, 'cat_name' => 'Мъжко', 'type_id' => 2, 'type_name' => 'Ризи'],
	[ 'cat_id' => 2, 'cat_name' => 'Женско', 'type_id' => 3, 'type_name' => 'Рокли'],
	[ 'cat_id' => 2, 'cat_name' => 'Женско', 'type_id' => 4, 'type_name' => 'Блузи']
];

Правиш си цикъл, който да групира типовете по категория, за да може да ги използваш после в менюто:

Код:
$grouped = [];

foreach($sqlResult as $row) {
	if(!array_key_exists($row['cat_id'], $grouped)) {
		$grouped[$row['cat_id']] = ['cat_name' => $row['cat_name'], 'types' => []];
	}
	$grouped[$row['cat_id']]['types'][] = ['type_name' => $row['type_name'], 'type_id'=> $row['type_id']];	
}

var_dump($grouped);

Менюто може да се билдне така. Не съм го тествала, ама би трябвало да работи:

Код:
<ul class="nav navbar-nav">
    <li><a class="active" href="index.php">Начало</a></li>
    <li><a href="#" class="dropdown-toggle" style="background-color:#e66ba2;" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Дрехи <span class="caret"></span></a>
        <ul class="dropdown-menu">
        	<?php foreach($grouped as $id => $category): ?>
            <li class="dropdown-submenu">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo $category['cat_name'];?></a>
                <ul class="dropdown-menu">
                	<?php foreach($category['types'] as $type) :?>
                    <li><a href="#"><?php echo $type['type_name'];?> </a></li>
                	<?php endforeach; ?>
                </ul>
            </li>
        	<?php endforeach; ?>
        </ul>
    </li>
</ul>
 
Работи, но как да направя sqlResult автоматично да прави това:

PHP:
$sqlResult = [
   [ 'cat_id' => 1, 'cat_name' => 'Мъжко', 'type_id' => 1, 'type_name' => 'Тениски'],
   [ 'cat_id' => 1, 'cat_name' => 'Мъжко', 'type_id' => 2, 'type_name' => 'Ризи'],
   [ 'cat_id' => 2, 'cat_name' => 'Женско', 'type_id' => 3, 'type_name' => 'Рокли'],
   [ 'cat_id' => 2, 'cat_name' => 'Женско', 'type_id' => 4, 'type_name' => 'Блузи']
];
 
Код:
$query = mysql_query("
SELECT categories.id as cat_id, categories.name as cat_name, types.id as type_id, types.name as type_name
FROM categories JOIN types ON types.categorie_id = categories.id") or die(mysql_error());

само това

Edit:
Код:
$sqlResult = array();
						while($row_cat = mysql_fetch_assoc($query)) $sqlResult[] = $row_cat;

Така работи. Благодаря @Fakeheal, +1
 

Back
Горе