Autor Zpráva
Akacko
Profil
sry za nepřesny nazev topicu... ale teď k problemu

jedna se o menu typu

Nadpis A
- položka 1
- položka 2
Nadpis B
- položka 3
- položka 4
...

v databazi mam uložene nadpisy i položky zvlašť v tabulkach. nyni bych potřeboval udělat dotaz(y) na vypis a hlavně uspořadani menu tak, jak jsem to zobrazil nahoře. Netušim však, jak zabranit takovemu to vypisu:

Nadpis A
- položka 1
Nadpis A
- položka 2

Nadpis B
- položka 3
Nadpis B
- položka 4



máte nějake napady?

použivam mysql databazi, počat nadpisu a položek neni určity (da se jen spočitat pomoci dotazu). Budu vděčny za jakekoliv návrhy.
pmasarik
Profil
Nepoznám tvoju DB ale ja to robím takto.

V mojom príklade mám jednu tabulku kde sú názvy športov + id športu a v druhej tabulke je referencia pre daný šport, ktorá má vlastné id a id športu ku ktorému patrí. Toto by malo byť logické (teda aspoň dúfam)


$sql = "SELECT sporty.sport_id, sporty.nazov_sportu, referencie.nadpis, referencie.ref_id
FROM sporty
INNER JOIN referencie
USING (sport_id)
ORDER BY sporty.radenie";

$result = mysql_query($sql);

echo '<dl>'.NL;
$skupina_prev = 0;
while ($row = mysql_fetch_assoc($result)) {
if ($skupina_prev != $row['sport_id']) {
echo '<dt>'.$row['nazov_sportu'].':</dt>'.NL;
$skupina_prev = $row['sport_id'];
}
if (isset($row['ref_id'])) {
echo '<dd>'.$row['nadpis'].'</dd>'.NL;
}
}
echo '</dl>'.NL;
Akacko
Profil
mohl bys mě ještě trochu zasvětit do toho INNER JOIN - USING .

Trochu jsem Googloval, ale moc jsem to nepochopil.

ten tvůj kod jsem přepsal do pro mě přijatelnějši formy :)


<?


$skupina_prev = 0;
$sql =mysql_query("SELECT menu.id_menu, menu.name_menu, menu.category_id FROM menu INNER JOIN submenu USING (menu_id)");

while ($row=mysql_fetch_array($sql)):

if ($skupina_prev != $row['menu_id']) {

echo '<dt>'.$row['name_menu'].':</dt>'.NL;

$skupina_prev = $row['menu_id'];

}

if (isset($row['id_smenu'])) {

echo '<dd>'.$row['name_smenu'].'</dd>'.NL;

}

endwhile;



?>


pro větši pochopeni přikladam tabulky...


create table menu
(
id_menu int not null auto_increment,
name_menu varchar(200) not null,
category_id int not null,
PRIMARY KEY(id_menu)
);


create table submenu
(
id_smenu int not null auto_increment,
name_smenu varchar(200) not null,
menu_id int not null,
PRIMARY KEY(id_smenu)
);
pmasarik
Profil
Niečo viac o JOIN - http://www.linuxsoft.cz/article.php?id_article=837
Je to trochu zložitejšie ale ak zistíš ako to funguje tak je to jednoduché...

A USING je len iný (jednoduchší) zápis pre toto:

//USING (sport_id)
//ON sporty.sport_id=referencie.sport_id


V tom tvojom príklade máš namiesto mysql_fetch_assoc použité mysql_fetch_array takže ti to nepôjde, inak by ti to malo fungovať.

Pre lepšie pochopenie skús daný SQL vložiť v PhpMyAdminovy do sql konzole, aby si zistil aké data ti to vracia.
Akacko
Profil
no na netu jsem se dočetl, že mysql_fetch_assoc je ekvivalent mysql_fetch_array

jinak diky za vysvětleni... si to teď přečtu, snad to nějak spojim ...
pmasarik
Profil
A fakt, máš pravdu to som si doteraz ani nevšimol :-)
Akacko
Profil
SUPER!!!!! konečně po 8 hodinach jsem to zkutil, ba co vic, porozuměl jsem!!!!!

diky... maš u mě velke, opravdu velke pivo!!!
pmasarik
Profil
Nemáš začo, možno sa to dá aj jednoduchšie, ale ja som prišiel niekedy na toto riešenie a tak ho používam...
Toto téma je uzamčeno. Odpověď nelze zaslat.