Autor Zpráva
anione
Profil
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
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());
Zkoušel jsem toho už spusty, ale vždy to končí hláškou:
Unknown column 'id' in 'where clause'
Joker
Profil
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
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
Pomůže mi prosím někdo s tím napojením a zjištění $id? Díky
Alphard
Profil
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
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
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
Jak zjistím pomocí PHP v tomto případě id=2? Děkuji,.
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
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
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
pak normálně
$_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
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
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
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
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
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
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
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é.
Toto téma je uzamčeno. Odpověď nelze zaslat.