Autor Zpráva
IdemeNaHavaj
Profil
Mám problém ktorý sa mi podarilo vyriešiť iba tak, že sa mi SQL príkaz načítava cca 30 sekúnd
Mám tabulku kde mám cca 500 riadkov a v každom je Nadpis (ktorý sa aj opakuje) a podnadpis ktorý je unikátny. Každý nadpis má niekoľko podnadpisov.
Potrebujem to nejako jedným SQL príkazom načítať, ja to aktuálne robím tak, že načítam všetky Nadpisy ako distinct, a potom vo while() načítavam podnadpisi WHERE Napis je načítaný Nadpis z toho DISTINCT príkazu.
Neviem si rady ako to spojiť.
juriad
Profil
A když vyhodíš ten distinct a rovnou položíš dotaz:
SELECT nadpis, podnadpis FROM tabulka
, tak nemusíš používat žádný while cyklus.

Předpokládám, že tvou současnou motivací k cyklu byl společný nadpis pro několik podnadpisů.
Inspiruj se zde: Nadpis skupiny
nemeja
Profil
Koukni se na traverzovaní kolem stromu pro více urovní, pokud to má jenom dvě, tak použij jak napsal juriad
IdemeNaHavaj
Profil
juriad:
Díky mám to, použil som ten kód
$pamet = '';
while ($line = …)
{
  if ($line['pismeno'] != $pamet)
  {
    $pamet = $line['pismeno'];
    echo "<b>$pamet</b><select>";
  }
  echo "<option>$line[slovo]</option>";
}
ale potrebujem tam nejako doplniť aby to bolo v <selecte>
a tam kde je to $line[slovo]
chcem dať <option>-y ale neviem ukončiť ten <select>, neviem kde to mám dať
Kajman
Profil
$pamet = $konec = '';
while ($line = …)
{
  if ($line['pismeno'] != $pamet)
  {
    $pamet = $line['pismeno'];
    echo "$konec<b>$pamet</b><select>";
    $konec = "</select>";
  }
  echo "<option>$line[slovo]</option>";
}
echo $konec;
IdemeNaHavaj
Profil
Kajman:
Nejde to ako potrebujem. Musí to byť v tej podmienke if($line != $pamet), ten koniec musí byť vždy za posledným <optionom> tak som si to predstavoval.
IdemeNaHavaj
Profil
http://php.vrana.cz/traverzovani-kolem-stromu-prakticky.php
tomu vôbec nerozumiem, rozmýšlam čo je to $row['hloubka'] ..hĺbka čoho?
juriad
Profil
IdemeNaHavaj:
http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back
S oblibou odkazuji na tuto prezentaci, která ukazuje čtyři různé způsoby reprezentace stromu v databázi (počínaje stranou 48).
Zde oblíbené a často doporučované traverzování kolem stromu je popsané od strany 58.


Číslo je hloubka/úroveň; text je samotný nadpis
1 A
2 A.A
3 A.A.A
2 A.A.B
2 A.B
3 A.B.A
1 B
2 B.A
3 B.A.A
2 B.B
Pokud máš podnadpis A.A.B, tak ten je v hloubce 3; jeho rodič je A.A, dědeček je A a nad ním už nic není.
IdemeNaHavaj
Profil
Ja mám len 2 stĺpce "nadpis" a "podnadpis" v jednej tabulke
Nadpis sa opakuje, a podnadpis je unikátny.
juriad:
Nerozumiem tomu čo je v tom návode, tam sa autor prípaja aj do inej tabuľky
juriad
Profil
IdemeNaHavaj:
Pokud máš jen dvě úrovně a nikdy jich nebudeš chtít více, tak na nějaké ukládání stromů zapomeň a použij svůj existující přístup: jeden sloupec nadpis; druhý sloupec podnadpis.

Zkus ukázat pár záznamů v databázi a HTML kód, který chceš vygenerovat. Z toho, cos napsal v [#4] moc moudrý nejsem. Nějak nechápu, proč bys měl chtít vypisovat nadpisy a podnadpisy do selectů a optionů.
IdemeNaHavaj
Profil
Vyriešil som to takto
http://sqlfiddle.com/#!2/fb337/1
a VALUE (teda podnadpis) som si explodol()

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: