Součet hodnot – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Součet hodnot – PHP – Fórum – Programujte.comSoučet hodnot – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
baryman0
Newbie
12. 8. 2008   #1
-
0
-

Tak věc se má takto, mám dvě tabulky.

První je "mmh_file_storage" kde jsou fotky, k nim ID člověka který je uploadnul a počet návštev dané fotky vše na jednom řádku. Tak je to u každé uploadnuté fotky.

Druhá je mmh_user_info ve které je výpis lidí, včetně jejich ID a do této potřebuju dát hodnotu zobrazeni, která by byla součet všech zobrazení fotek u jednoho uživatele.

Pro příklad : uživatel Honza uploadnul fotky "dovolena.jpg" (shledlo ji 10 lidí) "more.jpg" (shedlo 8 lidí) a "písek.jpg" (shlédli 2). Tyto hodnoty jsou v té první tabulce. A já potřebuju aby u Honzy se v druhé tabulce do zobrazení zapsalo k Honzovi číslo 20.

Jen už mi to vubec nemyslí a nemám žádný nápad. Můžete mi poradit? Chápete co potřebuji?
Všem moc díky předem za pomoc :)

Nahlásit jako SPAM
IP: 84.38.187.–
Reklama
Reklama
bukaj0
Věrný člen
12. 8. 2008   #2
-
0
-

Něco ve smyslu:

SELECT 

mmh_user_info.id AS id, mmh_user_info.jmeno AS jmeno, ...,

SUM(mmh_file_storage.pocet_navstev_k_jedne_fotce)
AS pocet_navstev_k_uzivatelovo_fotkam_celkem

FROM mmh_user_info

LEFT JOIN mmh_file_storage
ON mmh_user_info.id = mmh_file_storage.uzivatelovo_id

GROUP BY mmh_user_info.id
?

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
baryman0
Newbie
13. 8. 2008   #3
-
0
-

jj diky, ale potřeboval bych to jako PHP kód který by nakocnec hodnotu "pocet_navstev_k_uzivatelovo_fotkam_celkem" uložil do tabulky "mmh_user_info" jako $zobrazeni

Nahlásit jako SPAM
IP: 84.38.187.–
hrach
~ Redaktor
+1
Boss
13. 8. 2008   #4
-
0
-

To baryman : no ale to je celkem blbost... preci nebudes nejakou hodnotu ukladat jeste nekde jinde... a pokud to tak opravdu chces, tak se z bukajova sql vytaznes z vysledku 'pocet_navstev_k_uzivatelovo_fotkam_celkem' a ulozis si to to te sve druhé tabulky

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
bukaj0
Věrný člen
13. 8. 2008   #5
-
0
-

baryman
ale potřeboval bych to jako PHP kód
To je tak těžké ho napsat? Prostě vybereš tímto dotazem z databáze, co potřebuješ (nejspíše bude stačit id a pocet_navstev_k_uzivatelovo_fotkam_celkem, jestliže je id primarním klíčem), procházíš výsledky dotazu a postupně podnikáš UPDATy.

Nebo další možnost, mnohem čistší a jednodušší – vytvoříš si z tohoto dotazu view, a pak uděláš UPDATE ze dvou tabulek (UPDATE mmh_user_info AS ui, nazev_view AS v SET ui.zobrazeni = v.pocet_navstev_k_uzivatelovo_fotkam_celkem).

Ale osobně bych se tohoto počínání vyvaroval. Ukládat ten počet zobrazení celkem do tabulky k uživateli je zbytečné, protože se dá právě získat jinak. Pokud se opravdu chcceš tvářit, že se jedná jen o jednu tabulku, vytvoření jen toho view by asi bylo nejjednodušší. Pokud se bojíš o výkon, lepší než „cachování“ v databázi bude podle mě vybraná data normálně cachovat v aplikaci.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
baryman0
Newbie
13. 8. 2008   #6
-
0
-

Jde mi o to, abych měl v tabulce mmh_user_info u každého uživatele počet zobrazení fotek, které on uploadnul. A tento příkaz se v php provede při každé návštěvě fotky.

Nahlásit jako SPAM
IP: 84.38.187.–
hrach
~ Redaktor
+1
Boss
13. 8. 2008   #7
-
0
-

To baryman : no tak je tak slozite kdyz zvysujes counter u fotky zvysit take counter u uzivatele???

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
baryman0
Newbie
13. 8. 2008   #8
-
0
-

Nebylo bo, JENZE ten počet shlednuti u fotky je dán v další tabulce IP, kde počet tech nástev získám takto :



// $nazev je promena danné fotky
$sql2 = mysql_query("SELECT * FROM ip");
$zaznam = mysql_fetch_array($sql2);
$zobrazeni = mysql_num_rows(mysql_query("SELECT * FROM ip WHERE fotka = '$nazev'"));


no proste sečtu řádky z tabulky IP (sloupce : fotka, ip, datum) kde se shoduje FOTKA s názvem fotky na které zrovna návstevník je. Potom zapíšu do tabulky mmh_file_storage do sloupce "navstevy". Jen nevím jak to mám udelat aby se to ukládalo i do té druhé tabulky přímo k danému člověku :(

Nahlásit jako SPAM
IP: 84.38.187.–
Prog.0
Věrný člen
13. 8. 2008   #9
-
0
-

To baryman :

Snažím sa pochopiť, no nejako mi to nejde:

Máš nejakú tabuľu, "ip" kde jeden riadok predstavuje jedno zobrazenie nejakej fotky. O akú fotku ide máš v stringovom stĺpci "fotka". Pri každom zobrazení fotky pridáš do tejto tabuľky riadok. Keď chceš zistiť počet zobrazení niektorej fotky, zavoláš SELECT * from ip WHERE FOTKA = nazov. Potom, čo sa všetky tie dáta z mysql pretiahnu do PHP, zistíš koľko to bolo riadkov a to považuješ za počet zobrazení tej fotky.

Tento zistený údaj potom zapíšeš do tabuľky spomenutej v tvojom prvom poste (mmh_file_storage) ku konkrétnej fotke, predpokladám že asi nejako takto:

Mysql_query('update mmh_file_storage set počet návštev = zistena hodnota where fotka = fotka...


Prosím potvrď, či je to tak, alebo to upresni, pred tým než budem pokračovať...

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
baryman0
Newbie
13. 8. 2008   #10
-
0
-

Přesne tak jak jsi napsal to je. Mě funguje tak jak potřebuji i ten první kod od bukaje ale potřebuju tam jeste nějak dohodit aby k danému USER_ID se načetlo(ulozilo) to celkové_zobrazi_vsech_fotek_uzivatele.

Nahlásit jako SPAM
IP: 84.38.187.–
Prog.0
Věrný člen
13. 8. 2008   #11
-
0
-

jednoduché veci riešiš strašne komlikovanou a škaredou cestou a potom je ťažké dorobiť do toho nejakú banalitu.

Ten návrh je totálny chaoz. Kôli jednej fotke preťahuješ pomaly celú tabuľku. Máš vôbec tušenie ako sa pri tom mysqlka namaká? A o využití pamäte nehovorím...

Príklad: keď zavolaš toto:
$zobrazeni = mysql_num_rows(mysql_query("SELECT * FROM ip WHERE fotka = '$nazev'"));

Najprv mysl prebehne celú tabuľku (alebo len index, pokiaľ ho máš) a všetky riadky, ktoré vyhovujú pošle do php. Z celého tohto kvanta dát, sa nevyužije ani jedna bunka - použije sa iba počet riadkov.
Už len toto by šlo podstatne zrýchliť takto: $zobrazeni = mysql_result(mysql_query("SELECT count(*) FROM ip WHERE fotka = '$nazev'"),0);

Nemá zmysel riešiť konkrétnu úlohu, skôr navrhnúť lepší dátový model. Ak sa jedná o zabehnutý systém, budeš potrebovať poriadne veľa leukoplastu...

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
baryman0
Newbie
13. 8. 2008   #12
-
0
-

Bohužel upravuju script, který jsem já nedelal. Se zatížením problém není, jede to na vlastním serveru. Nevíš teda poradit s tím jak to ted mám já?

Nahlásit jako SPAM
IP: 84.38.187.–
Prog.0
Věrný člen
13. 8. 2008   #13
-
0
-

pri každom zobrazení fotky zvys pocty zobrazeni pri fotke aj pri uzivatelovi:

update mmh_file_storage set počet návštev = počet návštev + 1 where fotka = aktualne_zobrazena_fotky
update mmh_user_info set počet návštev = počet návštev + 1 where uzivatel = vlastnik_aktualne_zobrazenej_fotky

ak tam mas teraz nespravne cisla, tak ich budes musiet natiahnut z tej tabulky ip - s tym ti pomoze script ktory len raz:

princip:

1. zistis vsetkych uzivatelov:
2. cyklus - pra kazdeho uzivatela urob:
2.0. $pocet_zobrazeni_uzivatela = 0
2.1. zisti vsetky fotky
2.2. cyklus - pre kazdu forku urob
2.2.2. $pocet_zobrazeni_fotky = zisti pocet zobrazeni konkretnej fotky z tabulky ip (select count(*)...)
2.2.2. uloz zisteny pocet ku fotke (update ...set pocet = $pocet_zobrazeni_fotky
2.2.3. zvys pocet zobrazeni pre daneho uzivatela o pocet zobrazeni fotky $pocet_zobrazeni_uzivatela+= $pocet_zobrazeni_fotky;
2.2. cyklus - koniec
2.3. uloz zisteny pocet ku uzivatelovi (update ...set pocet = $pocet_zobrazeni_uzivatela
2. cyklus - koniec

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
13. 8. 2008   #14
-
0
-

To ukladani celkoveho poctu zobrazeni i k uzivateli je urcite krok spravnym smerem, nicmene to prepocitavani by slo resit daleko jednoduseji. Bylo by to zase neco v tom smyslu jak psal bukaj.

Nahlásit jako SPAM
IP: 78.102.164.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
Prog.0
Věrný člen
13. 8. 2008   #15
-
0
-

To CommanderZ :
Každopádne ide o to, aby sa ten údaj nepočítal stále odznova, ale bol uložený. Pred tým sa tie čísla musia "synchronizovať" a to stačí urobiť iba raz.

Ohľadom algoritmu máš pravdu, šupnúť tú úlohu na mysql to urýchli. Na pochopenie mi však príde jednoduchšie ukázať to na cykloch.

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
baryman0
Newbie
13. 8. 2008   #16
-
0
-

tak jsem na stránku se zobrazením fotky, tzn za část kde se připisují do databáze počty jednotlivých fotek vložil toto :



// zobrazeni je sloupec v tabulce mmh_user_info, ten je nulový
// a do nej se mají připočítat celkové shlédnutí fotek od jednotlivých lidí
// nevím jestli je vhodné to psát takto "mmh_file_storage.gallery_id",
// ale proste to musím porovnat z druhou databází

mysql_query("update mmh_user_info
set zobrazeni = zobrazeni + 1
where user_id = mmh_file_storage.gallery_id ");
no ale i tak pořád nefunguje, hodnota v sloupci zobrazení se nezmení :(

Editoval hrach: čitelnost

Nahlásit jako SPAM
IP: 84.38.187.–
13. 8. 2008   #17
-
0
-

Pouzivej velka pismena pro SQL klicova slovam pouzivej enter, pouzivej tabelator...presne jako bukaj. Pak se o tom dotazu muzem pobavit.

Nahlásit jako SPAM
IP: 78.102.164.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
baryman0
Newbie
13. 8. 2008   #18
-
0
-

To CommanderZ :
proč to mám psát jako on s tabulátory? píšu přímo do php on to psal jako sql příkaz třeba do phpmyadmina. nebo mám tak psat příkazy i do php?

tady to je s velkými písmeny

mysql_query("UPDATE mmh_user_info

SET zobrazeni = zobrazeni + 1
WHERE user_id = '$user' ");


Editoval hrach: čitelnost

Nahlásit jako SPAM
IP: 84.38.187.–
bukaj0
Věrný člen
13. 8. 2008   #19
-
0
-

baryman
proč to mám psát jako on s tabulátory?
Je to pak přehlednější a dá se s tím líp pracovat, lépe to upravovat apod.

píšu přímo do php on to psal jako sql příkaz třeba do phpmyadmina. nebo mám tak psat příkazy i do php?
Ano, piš jako člověk ;o) U těch jednoduchých dotazů se v tom neztratíš, ale pokud bude nějaký složitější a bude všechno na jednom řádku, blbě se v tom orientuje. Navíc, když to píšeš všechno na jeden řádek, tohle fórum se roztáhne, aby byl vidět celý řádek.

A k tvému problému: Jestli máš přístup k DB, než v aplikaci šaškovat s takovýmto obnovováním, nebylo by nejjednodušší do databáze hodit na tu tabulku zaznamenávající přístupy trigger, který po přidání přepočítá počty přístupů a zapíše je do ostatních tabulek? Vůbec nebudeš muset řešit UPDATy v aplikaci, prostě jenom přidáš do tabulky přístupů řádek a databáze všechno zařídí.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
baryman0
Newbie
13. 8. 2008   #20
-
0
-

problém vyřešen, VELKY dík patří bukajovi :)

Nahlásit jako SPAM
IP: 84.38.187.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 64 hostů

Podobná vlákna

Součet hodnot. — založil Luckaa

MySQL - součet hodnot — založil Kouky27

Součet některých hodnot pole — založil anakondatra

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý