Autor | Zpráva | ||
---|---|---|---|
anione Profil |
#1 · Zasláno: 13. 8. 2012, 16:26:55
Dobrý den,
tvořím měnší script na vkládání článků. Nyní řeším menší problém, kdy potřebuji spočítat kolik v určité kategorii je článků. Vytvořil jsem si tabulku pod názvem kategorie a v ní sloupec pocet_clanku, kde chci, aby mi po každé, když přidám článek databáze aktualizovala počet článků v kategorii, ve které byl článek přidáván. mysql_query("UPDATE kategorie SET pocet_clanku= pocet_clanku + 1 ) or die (mysql_error()); Problém je v tom, že pokud přidám článek v kategorii A, tak se připíše hodnota +1 do všech kategorií, což je špatně. Potřebuji, aby se hodnota +1 připsala pouze do kategorie, ve které byl článek psán. Děkuji za rady. |
||
Kcko Profil |
#2 · Zasláno: 13. 8. 2012, 16:36:22
chybí Ti tam WHERE neco = hodnota
|
||
anione Profil |
Kcko:
Bohužel, zatím bez úspěchu. $id =mysql_real_escape_string($_GET['id']); mysql_query("UPDATE kategorie SET pocet_clanku= pocet_clanku + 1 WHERE id='".$id."') or die (mysql_error()); Unknown column 'id' in 'where clause'
|
||
Joker Profil |
#4 · Zasláno: 13. 8. 2012, 18:24:34
anione:
Ta hláška prostě říká, že v tabulce neexistuje sloupec jménem id. |
||
anione Profil |
Stále si s tím hlavu lámu.
Kcko, Joker Abych upřesnil moji situaci, napíšu sem v čem je problém. Web mám rozdělený celkem do čtyř kategorií a 8 složek: A kategorie&id=1 - Složka 2012(id=1), Složka 2011(id=2) B kategorie&id=2 - Složka 2012(id=3), Složka 2011(id=4) C kategorie&id=3 - Složka 2012(id=5), Složka 2011(id=6) D kategorie&id=4 - Složka 2012(id=8), Složka 2011(id=8) Budu chtít například přidat jeden článek do kategorie A (id=1) a jako složku zvolím Složka 2012(id=1). Rozkliknu teda odkaz na kategorii A a složku: Složka 2012, kde mám seznam článků a také odkaz na formulář, který rozkliknu a vytvořím zkušební článek. Ok, a teď nastává onen problém. Potřebuji nějakým způsobem dosadit a zjistit $id kategorii (v tomto případě kategorii A). mysql_query("UPDATE kategorie SET pocet_clanku= pocet_clanku + 1 WHERE id='".$id."') or die (mysql_error()); Půjde to nějakým jednoduchým způsobem provést? Díky předem za pomoc. |
||
panther Profil |
#6 · Zasláno: 13. 8. 2012, 19:22:37
anione:
a (MySQL) tabulka/y vypadá/jí jak? Máš tam někde to ID? Nevypadá to tak. |
||
anione Profil |
panther:
V tabulce slozky mám tedy 8 sloupců(položek) s ID, ve které kategorii se každá složka nachází. Bude to stačit? |
||
Spectator Profil |
záleží na velikosti písmen!
|
||
anione Profil |
#9 · Zasláno: 13. 8. 2012, 20:34:04
Pomůže mi prosím někdo s tím napojením a zjištění $id? Díky
|
||
Alphard Profil |
#10 · Zasláno: 13. 8. 2012, 20:40:31
anione:
Snažil jsem se přečíst všechny informace a pochopit, ale neuspěl jsem. Když vyjdu z [#1], zdá se mi, že je zbytečné ukládat počet článků, ten musí jít zjistit. Jestli to nejdě, máte blbě navrženou databázi. Mohu vám naznačit, jak by měly vypadat tabulky, ale potřebuji informaci o tom, jestli jeden článek může spadat do více kategorií. |
||
anione Profil |
#11 · Zasláno: 13. 8. 2012, 21:10:52
Takže to zkusím vysvětlit ještě jednu:
Mám tedy celkem 3 tabulky: Kategorie, složky, články Web mám rozdělený celkem do čtyř kategorií a 8 složek: A kategorie&id=1 - Složka 2012(id=1), Složka 2011(id=2) B kategorie&id=2 - Složka 2012(id=3), Složka 2011(id=4) C kategorie&id=3 - Složka 2012(id=5), Složka 2011(id=6) D kategorie&id=4 - Složka 2012(id=8), Složka 2011(id=8) Každá položka v tabulce slozka má vždy ID kategorie do které patří. Každý článek v tabulce clanky má vždy ID složky do které patří. Pokud tedy nepůjde zjistit a doplnit ID kategorie při vkládání článku, máte teda tady někdo jiný způsob jak to provést. Moc děkuji. |
||
Alphard Profil |
#12 · Zasláno: 13. 8. 2012, 21:22:18
select count(*) from clanky c left join slozky s on s.id = c.id_slozky where s.id_kategorie = x |
||
anione Profil |
Alphard: Děkuji,
ale není to bohužel řešení mého problému. Potřebuji, aby se vždy počet článků v databázi aktualizoval a já ho pak jednoduše zobrazil. Stačilo by, kdyby mi tady někdo poradil jak dosadit v url ID kategorie ve které je aktuální složka. URL: domena.cz/kategorie&id=1&slozka&id=2 |
||
pcmanik Profil |
anione:
Naco potrebujes aktualizovat pocet clankov v databaze? Staci ti zistit pocet tam kde ho potrebujes pomocou COUNT, tak ako ti ukazal Alphard. Nemozes nam sem vlozit strukturu tvojej databazy? Zrejme niesom jediny, kto nechape co vlastne chces. |
||
Kcko Profil |
#15 · Zasláno: 14. 8. 2012, 12:26:12 · Upravil/a: Kcko
pcmanik:
Třeba proto? http://php.vrana.cz/dopocitavane-sloupce.php Já mám taky sloupce tohoto typu dopočítané a hodí se to v x situacích. Alphard: „Když vyjdu z [#1], zdá se mi, že je zbytečné ukládat počet článků“ Taktéž jako u Vrány, ale u Tebe tento komentář beru s nadhledem, narozdíl od pcmanik, který tady papouškuje po "zkušenějších autoritách" zde na d.jpw.cz |
||
pcmanik Profil |
#16 · Zasláno: 14. 8. 2012, 12:38:20 · Upravil/a: Moderátor (editace znemožněna) 15. 8. 2012, 03:27:35
Kcko:
Ty mas nejaky osobny problem voci mne, alebo co? Neodpovedal si mi totiz ani v tomto vlakne. Nemyslim ze som tu polozil taku sprostu otazku. Si voci mne zaujaty... Ci sa mam bat uz napisat do kazdeho topicu, lebo nahodou tebe sa to nebude pacit, co napisem?! Poziadal som ho jednoducho o detaily, mozno v tomto pripade naozaj nepotrebuje pocitat a ukladat udaje priamo v databaze. Ale ak si taky mudry ze to vies dat rovno z hlavy tak tu laskavo neosocuj a napis mu fungujuci prikaz. Lebo tvoj prispevok tu nema ziadnu hodnotu. Tazatelovi si nijak nepomohol len si tu napisal zbytocny a hlupy prispevok. Poprosim uz moderatorov, aby sa nejako k tomuto vyjadrili, popripade usmernili moje nazory, ktore zjavne podla Kcko niesu spravne. A ak tu naozaj prispievam len blbostami, tak ma rovno mozte vyhodit... mm Moderátor Alphard: Svítí nám červené upozornění, ale nikdo neví jak zasáhnout. Vlákno je vyřešené, doufám, že se zde nebude pokračovat žádná diskuse mimo téma. Zdržte se prosím osobních útoků.
|
||
Kcko Profil |
pcmanik:
Piš si co chceš, ale aby to mělo hlavu a patu. Dosti často nemá. Tazateli jsem poradil v [#2] Kcko a dle mého je to správně, to, že to nechápe, už není moje starost. Dál moje pomoc končí, protože si nemohu dovolit ztrácet soukromý drahocenný čas s někým kdo si neví rady v takto triviální záležitosti. Ale je zde spousta lidí, kteří ho dokopou ke kýženému výsledku a budou se s ním piplat jak s malým dítětem ... Nechápu, proč mu radíš, nějaký počítaní za běhu složitějším dotazem, když si ani neumí dosadit do jednoduchého dotazu WHERE podmínku. A tazatelova otázka nezněla Jak zjistit počet komentářů dotazem ... tak nevím proč na to reaguješ jak dementní jedinec, co neumí číst viz Naco potrebujes aktualizovat pocet clankov v databaze? Tobě neodpovídám záměrně, škoda času. Plácáš se v tom jak nudle v bandě. ;-) PS. Hlavně mi prosím už nepiš, že můj příspěvek nemá žádnou hodnotu, je to k pousmání v porovnání s tím co zde produkuješ ty ;-) |
||
Alphard Profil |
Ten článek jsem četl již v tom roce 2010, také dopočívám některé sloupce, ale v tomto případě se mi zdálo, že se anione zcela zbytečně trápí. Nechci ho podceňovat, ale myslím, že je spíš začátečník. Nemyslím si, že na tom webu bude tolik článků, aby to musel řešit. Je zde na fóru docela běžná praxe, že se snažíme začátečníky navést na správnu cestu, nelze vyloučit několik případů, kdy se zmýlíme.
anione: Ok, kolega si myslím, že vám máme prostě odpovědět, takže: > URL: domena.cz/kategorie&id=1&slozka&id=2 > Jak zjistím pomocí PHP v tomto případě id=2 Ta adresa je sestavená podivně, parametr id se přepisuje, slozka nemá žádnou hodnotu (ne, že by musela mít, ale fakt to takhle zamýšlíte?). Takže bych url sestavil takhle: domena.cz/kategorie?id=1&slozka_id=2 $_GET['id'], $_GET['slozka_id'] Pokud jde o návrh vaší databázové struktury, jestli chcete mít kvůli počtu vlastní tabulku, budiž, ale nedělal bych to jen kvůli tomu, že neumím počítat záznamy. Rovnou bych ale doplnil do tabulky clanky sloupec id_kategorie, taky by se mohl hodit (pak by např. pro získání počtu nebyl potřeba join). Kcko: „to, že to nechápe, už není moje starost“ To jistě není, ale příliš užitečná rada to pak taky není. :-) (ten smajlík je tučně schválně) |
||
anione Profil |
Jde mi především o to, jak vypsat aktuální ID kategorie na dané PHP stránce.
Takže mám soubor odeslat_clanek.php. V prohlížeči se k němu například dostanu přes kategorii A > Složka 2012 > Odeslat článek. Ok, a teď tedy k vyřešení mého problému: Jakým způsobem donutit PHP, aby zjistilo v jaké jsem kategorii a to v souboru odeslat_clanek.php? Zkoušel jsem něco jako: $sql = "SELECT id, celkem_clanku FROM kategorie WHERE id = " . mysql_real_escape_string($_GET['id']); $result = mysql_query($sql); while($row = mysql_fetch_assoc($result)) mysql_query("UPDATE kategorie SET celkem_clanku = celkem_clanku + 1 WHERE id='".$row['id']."'") or die (mysql_error()) Bohužel bez úspěchu Máte někdo nějaký nápad? |
||
Alphard Profil |
#20 · Zasláno: 14. 8. 2012, 13:06:04
anione:
Viz můj přechozí příspěvek uprostřed, je to pochpitelné? Parametry si vezmete z url, jen ji musíte sestavit tak, aby se nepřepisovaly. |
||
Kcko Profil |
#21 · Zasláno: 14. 8. 2012, 13:08:18 · Upravil/a: Kcko
Alphard:
Možná jsem se špatně vyjádřil. Pokud někdo něco potřebuje a člověk mu poradí a on stále neví a topí se v absolutních triviálních základech i když mu bylo jasně naznačeno či přímo napsáno jak na to, nevidím osobně smysl dál v topicu pokračovat a to proto, že vím, že se někdo zhostí této nevděčné úlohy. PS. Stále si myslím, že dopočítávání hodnot je snažší pro pochopení, než složitější JOIN-ování, kterému se stejně v budoucnu nevyhne, ale v tomto případě mi to přijde zbytečné. Stále si myslím, že řešení padlo v [#2], případné doplnění na možnou chybu v [#8], autor to potom trošku jak tatar roztáhl na další možné problémy. anione: Máte to někde vystaveno? Já se Vám na to klidně podívám, abych tu nebyl za zlouna a poté sem napíšeme řešení, jinak se z toho stane celkem zbytečný topic o 100 příspěvcích. |
||
Spectator Profil |
anione:
„while($row = mysql_fetch_assoc($result))“ jak funguje tento while, když nemá za sebou složenou závorku a neobsahuje tím žádné tělo kromě sebe sama. Není to jádro problému? |
||
Ugo Profil |
#23 · Zasláno: 14. 8. 2012, 16:49:27
Spectator:
jednořádkový while, první řádek za neohraničeným (závorka, dvojtečka) whilem je jeho tělo, stejně jako po podmínce třeba. Jen je to neskutečně nepřehledné zvlášť když se to roztáhne Kcko: člověče tebe tu mam docela rád jelikož toho dost víš a říkáš věci na přímo, ale neni toto už spíš urážení než přímý směr? :-/ anione: budu opakovat všechny kolem a budu tak za pitomce, ale v posledním uvedeném kódu není chyba a tak jak od prvního příspěvku doporučím .. 1. řiď se radama který dostáváš (všechny už jsi skutečně dostal) 2. dej sem potřebné informace k nalezení řešení = struktura tabulek, url (hodnoty proměnných v nefunkčním případě) 3. "Bohužel bez úspěchu" ... to je co, chyba, nestane se vůbec nic, provede se to vůbec? Základní debugování + popis problému jinak se tu tohle může řešit třeba tejden takhle to totiž vypadá, že to máš rozbité |
||
anione Profil |
#24 · Zasláno: 14. 8. 2012, 17:50:16
Stále nemohu přijít na to, proč se databáze neaktualizuje :( .
Takže, abych to shrnul: 1) Články se ukládají do databáze bez problému. 2) Dokonce jsem si nechal vypsat na stránku s formulářem ID aktuální kategorie přes $_GET["id"] . Fungovalo to! Vypsala se aktuální kategorie.
3) Pomocí následujícího kodu jsem chtěl aktualizovat tabulku kategorie s ID celkem_clanku . Článek se odeslal bez problému, ale tabulka se neaktualizovala (vše se obešlo bez chybových hlášek). $sql2 = "SELECT id, celkem_clanku FROM kategorie WHERE id= ". mysql_real_escape_string($_GET['id']); $result2 = mysql_query($sql2); while($row2 = mysql_fetch_assoc($result2)) mysql_query("UPDATE kategorie SET celkem_clanku = celkem_clanku + 1 WHERE id='".$_GET["id"]."'") or die (mysql_error()); Pokud by jste na něco přišly, budu rád. Díky |
||
Alphard Profil |
#25 · Zasláno: 14. 8. 2012, 18:31:57
anione:
Existuje v tabulce záznam s patřičným id? Počítáte s tím, že ten update se zopakuje tolikrát, kolik výsledků vrátí ten select (tj. 0 až n)? Vypište si sestavený dotaz, víte jak na to? ( mysql_query($q="update ..."); echo $q; + je to více příkazů, tak obalit do {} ).
|
||
Spectator Profil |
#26 · Zasláno: 14. 8. 2012, 18:33:23
pcmanik, Ugo:
děkuji za informaci. anione: k čemu je vůbec ten select? V prvním případě jsi ho použil, nadbyteně, ale nyní je k ničemu. Dle mne stačí: mysql_query("UPDATE kategorie SET celkem_clanku = celkem_clanku + 1 WHERE id='".$_GET["id"]."'") or die (mysql_error()); Ale mám pocit, že tady chybí nějaké další části kódu, které možná hrají roli. Nebylo by jednodušší okopírovat sem celý script? |
||
anione Profil |
Spectator, Alphard, Ugo, Kcko, pcmanik, panther:
Tak jsem ještě asi hodin hledal příčinu problému, než jsem ji našel. Trochu jsem upravil $_GET["id"] a už vše jede jak má. Děkuji Vám všem ;) |
||
Kcko Profil |
anione:
No vidíš, chyba byla hned na začátku, jak jsem tady proklamoval. Ono to má někdy i něco do sebe, protože si to pak pamatuješ a podobnou marginalitu už asi jen tak nezopakuješ. Ugo: „člověče tebe tu mam docela rád jelikož toho dost víš a říkáš věci na přímo, ale neni toto už spíš urážení než přímý směr? :-/“ Rozhodně ne, nemám ve svém věku a jak říkáš, po jistých zkušenost potřebu někoho urážet. Dosti často pomáhám nezištně (hodně mimo diskusní fórum), ale prostě chci, aby u toho člověk trošku přemýšlel a snažil se. Možná to píši příliš tvrdě, rozhodně nejsem necitelný balvan ;-))) a rád pomůžu každému kdo projeví trošku snahy a chtění. |
||
Alphard Profil |
#29 · Zasláno: 16. 8. 2012, 15:19:05
Dočasně dávám k ledu. Zatím se chystám mazat jen sám sebe, ale nepřeji si diskuse mimo téma, jinak tady začnou mazat méně hodní kolegové.
|
||
Časová prodleva: 11 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0