zdravim vsechny,
mam dve tabulky:
menu_polozky (
id_polozky - primary_key
nazev_polozky
kod_polozky
poradi_polozky ) type=InnoDB
a
menu_podpolozky (
id_podpolozky - primary_key
id_polozky
nazev_podpolozky
kod_podpolozky ) type=InnoDB
data v tabulkach jsou priblizne takova:
menu_polozky
id_polozky nazev_polozky
1 Aktuality
2 Diskuse
3 Rozvrhy
4 Fotogalerie
5 Liga
6 Vysledky
menu_podpolozky
id_podpolozky id_polozky nazev_podpolozky
1 1 Nové
2 1 Starší
3 1 Přidat
4 1 Odebrat
5 2 Přidat
6 2 Hledat
7 3 Všechny
8 3 Hledat
9 4 Z akci
10 4 Vyprazdnit
potreboval bych dotaz po kterym bych mel tento vypis:
Aktuality
Nové
Starší
Přidat
Odebrat
Diskuse
Přidat
Hledat
Rozvrhy
Všechny
Hledat
Fotogalerie
Z akci
Vyprazdnit
Liga
Vysledky
doufam ze to je pochopitelny a predem moc dekuji za pripadne jakekoli odpovedi..
<HTML>Pokud jde o jen o výpis, asi bych použil dva dotazy (jeden vybere ty hlavní sekce, druhý podsekce). Pokud jsou oba výsledky správně seřazeny, vhodným cyklem s vnořeným cyklem lze dosáhnout kýženého výsledku.
Pokud chcete oželet mezery a ten výstup použít někde v MySQL dál, použil bych něco takového:
<code>SELECT nazev FROM (
SELECT nazev_polozky AS nazev, (id_polozky * 50) AS vaha FROM menu_polozky
UNION
SELECT nazev_podpolozky AS nazev, (id_polozky * 50 + id_podpolozky) AS vaha FROM menu_podpolozky
) ORDER BY vaha</code></HTML>
<HTML>Otázka je, zda zdejší MySQL umí vnořené SELECTy. Už jsem s ním dlouho nepracoval.</HTML>
uz sem na to prisel ale presto dekuji kdyby to nekoho zajimalo tak takhle sem to proved..
<table width="50%" border="1" align="center">
<tr><th>Nazev</th><th>Poradi</th></tr>
<?php
include ("spojeni.php");
$sql = "select * from menu_polozky";
$vysledek = mysql_query($sql);
$zaznam = mysql_num_rows($vysledek);
for ($i = 1; $i <= $zaznam; $i++) {
$sqla = "select * from menu_polozky where poradi_polozky = '$i'";
$vysledeka = mysql_query($sqla);
$zaznama = mysql_fetch_array($vysledeka);
echo "<tr><td>".$zaznama["nazev_polozky"]."</td><td> </td></tr>";
$id_polozky = $zaznama["id_polozky"];
$sqlb = "select * from menu_podpolozky where id_polozky = '$id_polozky'";
$vysledekb = mysql_query($sqlb);
while ($zaznamb = mysql_fetch_array($vysledekb)) {
echo "<tr><td>".$zaznamb["nazev_podpolozky"]."</td></tr>";
}
}
?>
</table>
$sql = "select * from menu_polozky";
$vysledek = mysql_query($sql);
ziskas vsechno
$sqla = "select * from menu_polozky where poradi_polozky = '$i'";
k tomu ziskas jen nektere vybrane ze stejne tabulky
Nestacil by 1 dotaz? :)
A jak mas podpolozky, mozna by stacilo do SQL tabulky pridat sloupec hloubka, zanoreni, prvni oznacit jako 1, druhe jako 2. Predpokladam, ze v te tabulce nebude ani 1000 zaznamu, takze se select provede celkem rychle.
a jeste bych to teda udelal tak, ze:
SELECT FROM menu WHERE hloubka=1
-> polozky1
-> seznamID
"SELECT FROM menu WHERE hloubka=2 AND idpolozky IN (".implode(',',seznamID).")"
Az to mas vse, pak cyklem ulozit do promemne a cele vypsat jako jednu promennou. Mam zkusenosti, ze vypsani tabulky ala phpmyadmin radek po radku trva dele nez to ulozit do promenne treba po 50 radcich a vypisovat.
<HTML>papirek: Ne, to je špatné řešení a já jej neschvaluji. Vyvarujte se tolika dotazů. Stačí dva SELECTY (ani o ň víc) a potom jeden šikovný cyklus s vnořeným cyklem. Nic víc. Zkuste na to přijít.</HTML>
Dobrý je, že nadepsal téma jako: "slozity dotaz" a pak o příspěvek dále píše: "doufam ze to je pochopitelny..." Asi mi moc věřil... :-)))
..co takhle neškrábat se pravou rukou za levým uchem a použít prosté join?
tedy konkrétně
select
* -- tady si dejte, co potrebujete
from menu_polozky p
join menu_podpolozky pp on p.id_polozky = pp.id_polozky
order by id_polozky, id_podpolozky