Autor | Zpráva | ||
---|---|---|---|
Pechy.cz Profil |
Zdravím,
potřeboval bych poradit s výpisem z databáze. Jde mi o to, že vypisuji všechny řádky z tabulky spojená s druhou tabulkou. A v druhé tabulce ve sloupci "pod1" se objevuje třeba na 10 řádcích stejná hodnota, která se vrací zase do tabulky 1., ale já ji potřebuju vypsat jen 1x a pak pokračovat na další hodnotu. Poradíte prosím, jak to udělat? Kód: $sql = mysql_query("SELECT * FROM `obsah` WHERE `kategorie`='GRAFIKA'"); while ($vypis = mysql_fetch_array($sql, MYSQL_ASSOC)) { $nazev = $vypis['nazev']; $id = $vypis['id']; $q2 = "SELECT * FROM cesta WHERE `clanek`='$id'"; $r2 = mysql_query($q2) or die(mysql_error()); $row2 = mysql_fetch_array($r2); $pod1 = $row2['pod1']; if ($pod1!='0' && $pod1!='') { $q11 = "SELECT * FROM obsah WHERE `id`='$pod1'"; $r11 = mysql_query($q11) or die(mysql_error()); $row11 = mysql_fetch_array($r11); $nazev1 = $row11['nazev']; } if ($nazev1!='') { echo "$nazev1<br>"; } else { echo "$nazev<br>"; } } mysql_free_result($sql); Doufám, že jsem to napsal alespoň nějak srozumilteně. Děkuji za odpověď |
||
Taps Profil |
#2 · Zasláno: 6. 6. 2012, 15:53:06
|
||
Seki Profil |
#3 · Zasláno: 6. 6. 2012, 16:02:51
Pechy.cz:
ten kód je humus 1) mysql_fetch_array($sql, MYSQL_ASSOC) nahraď mysql_fetch_assoc ($sql) 2) zkus trochu jinak používat tabulátor 3) $nazev = $vypis['nazev']; - na tohle zapomeň, zbytečně to zpomaluje kód 4) dvakrát načítáš data z 1 tabulky - zbytečné plýtvání výkonem serveru (jednou si už ty data získal tak na co se na ně dotazovat znova) 5) proměnné zkus pojmenovávat tak, aby bylo poznat co je v nich uloženo |
||
Chuchycek Profil |
#4 · Zasláno: 6. 6. 2012, 16:08:39
Ahoj,
hele to co si napsal, je docela nesrozumitelné zkus to prosím tě trochu rozvinout, co by to cca mělo dělat. A já se ti na to mrknu :-) |
||
Taps Profil |
#5 · Zasláno: 6. 6. 2012, 16:15:26
Chuchycek:
samotná funkčnost bude zachována, jde jen o optimalizaci kodu, optimalizaci mysql dotazu a tabulátory kvůli přehlednosti kodu. |
||
Pechy.cz Profil |
Vím, že je to humus... Když to teda poupravím
$sql = mysql_query("SELECT * FROM `obsah` WHERE `kategorie`='REKLAMA'"); while ($vypis = mysql_fetch_assoc ($sql)) { $q2 = "SELECT * FROM cesta WHERE `clanek`='$vypis[id]'"; $r2 = mysql_query($q2) or die(mysql_error()); $row2 = mysql_fetch_array($r2); $podkategorie = $row2['pod1']; if ($podkategorie!='0' && $podkategorie!='') { $q11 = "SELECT * FROM obsah WHERE `id`='$podkategorie'"; $r11 = mysql_query($q11) or die(mysql_error()); $row11 = mysql_fetch_array($r11); $nazevpodkategorie = $row11['nazev']; } if ($nazevpodkategorie!='') { echo "$nazevpodkategorie"; } else { echo "$vypis['nazev']"; } } mysql_free_result($sql); Doufám, že už je to trochu lepší. Pro mě tedy ano. No, ale jde mi to to, že po tomto kódu dostanu výpis: Reklamní dárkové předměty Reklamní dárkové předměty Reklamní dárkové předměty Potisk Potisk Potisk Potisk Potisk Jarní sleva potisku Balící pásky s potiskem A já tam potřebuji vše jen 1x. Pro vysvětlení: V tabulce obsah jsou články celého webu. Tabulka cesta obsahuje informace, do jakých kategorií články patří. Př. Článek Ceník patří do Reklamích dárkových předmětů a ty patří do REKLAMY. Takže se dotážu (cesta), kam patří Ceník - ta mi vyjede, že patří pod článek Reklamní dárkové předměty. ( "pod1" = "31"; 31 => Reklamní dárk... ) No a já se pak zase ptám, kam patří ty, atd, atd. Ale teď potřebuju vypsat všechny hlavní podkategorie. Jelikož web nemá kategorie nijak zvlášť tvořený, ale kategorií se stává v podstatě jakýkoliv článek, tak jsem vytáhl všechny články, zjistil do čeho patří, do čeho patří to, a to patří do ... až jsem se dostal úplně nahoru (REKLAMA >> Reklamní dárkové předměty) - to potřebuju. Jenže v té cestě jsou třeba 4x. A já je potřebuju jen 1x.. O to mi tu jde. |
||
Chuchycek Profil |
#7 · Zasláno: 6. 6. 2012, 23:31:21
Jenže nechápu proč se dvakrát dotazuješ na uplně stejnou tabulku, tj. tabulka obsah?
|
||
Hando Profil |
#8 · Zasláno: 7. 6. 2012, 01:27:08
Na odstranění duplicitních položek z výpisu se dá použít "DISTINCT", tedy něco ve smyslu "SELECT DISTINCT FROM kategorie...".
Otázkou je, jestli spíš není problém ve špatném návrhu databáze. |
||
Pechy.cz Profil |
Chuchycek:
Zase tak moc s databází neumím... Nevím, jak vybrat všechny položky, najít k nim cestu a pak se vrátit a najít položky jim nadřazený... // EDIT Jsem *****... už jsem na to přišel. zbytečně přemýšlím nad zbytečnostma, přitom stačilo odebrat půlku kódu a změnit jedno znaménko. Nakonec jsem to vyřešil tak, že po výtahu z obsahu se to dotáže "který článek není podkategorií" (pod1 == "0") ... A je to vyřešeno. To je prostě tak, když už jsem dlouho v práci a pak přemýšlím, jak to nebude složitý... Výsledek: $sql = mysql_query("SELECT * FROM `obsah` WHERE `kategorie`='REKLAMA'"); while ($vypis = mysql_fetch_assoc ($sql)) { $q2 = "SELECT * FROM cesta WHERE `clanek`='$vypis[id]'"; $r2 = mysql_query($q2) or die(mysql_error()); $row2 = mysql_fetch_array($r2); if ($row2['pod1']=="0") { echo " $vypis[nazev]<br>"; } } mysql_free_result($sql); |
||
Chuchycek Profil |
|||
Časová prodleva: 12 let
|
0