Sčítání vybraných hodnot z tabulky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
quiced
Člen | 85
+
0
-

Zdravím,

už snad týden přemýšlím nad následujícím problémem a chtěl bych se zeptat zda by mi někdo nepomohl s jeho řešením.

Mám tyto dvě tabulky.

Image and video hosting by TinyPic

V tabulce profittable mám nadefinováno několik řádků a podle těchto řádků bych potřeboval vyhledat záznamy v druhé tabulce a u těchto záznamů sečíst sloupec price. Znamená to, že na konci by mi mělo vzniknout tolik sum kolik je záznamů v tabulce profittable.

Zkoušel jsem všemožná řešení, která mě napadla, ale nic mi bohužel nefungovalo.

Díky za každou radu.

s4muel
Člen | 92
+
0
-

predpokladam, ze vazba je products.type = profittype.type

SELECT
  pt.type,
  SUM (p.price) AS sucet_cien
FROM
  profittype pt
  INNER JOIN product p ON pt.type = p.type
GROUP BY pt.type

riadky z product, ktore nemaju zodpovedajuce riadky v profittype budu ignorovane

quiced
Člen | 85
+
0
-

Díky za nápovědu, ale bohužel bych potřeboval ještě pomoct s tím to dát do nette database. Jinak vytvořil jsem si cizí klíč mezi oběma tabulkama.

Nejsem si moc jistý skládáním podobných dotazů, ale začal jsem takto:

$this->appRepository->getProfitTypeTable()->sum(‚price.products‘)->group(‚type‘)

ale určitě tam bude někde chyba, takže kdyby mi někdo pomohl byl bych mu moc vděčný.

Díky za pomoc.

David Matějka
Moderator | 6445
+
0
-

verze nette? pro 2.0 asi takhle:

$connection
->table('profittype')
->group('profittype.type')
->select('SUM(products:price) AS price_sum, profittype.type')
quiced
Člen | 85
+
0
-

Tak nevím co dělám špatně, ale Nette mi hlásí tuto chybu: No reference found for $profittype->products. Předpokládám, že je problém s cizími klíči, ale jak je z obrázku vidět, klíč je vytvořený.

Image and video hosting by TinyPic

Zkoušel jsem mazat cache a aktualizoval jsem Nette na nejnovější verzi, ale nic z toho nepomohlo.

Díky za každou radu :D

David Matějka
Moderator | 6445
+
0
-

cizi klic ma smerovat z tabulky products na tabulku profittype

quiced
Člen | 85
+
0
-

To už jsem několikrát zkoušel, ale bohužel se mi to nedaří. Když se pokouším vytvořit cizí klíč z tabulky products na profittype, tak mi adminer píše tuto chybu: Zdrojové a cílové sloupce musí mít stejný datový typ, nad cílovými sloupci musí být definován index a odkazovaná data musí existovat.
Cannot add or update a child row: a foreign key constraint fails (bilito.#sql-348_48, CONSTRAINT ?sql?348_48_ibfk_1 FOREIGN KEY (type) REFERENCES profittype (id))

Když to udělám opačně, tedy z tabulky profittype na products, tak cizí klíč vytvořím bezproblému. Díky za radu :D.

David Matějka
Moderator | 6445
+
0
-

a jsou to stejny typy? nemas v products – type hodnotu, ktera neexistuje v profittype – id?

quiced
Člen | 85
+
0
-

Díky moc za pomoc, opravdu mě nenapadlo, že by mohlo vadit, že jsou rozdílné hodnoty v tabulkách a kvůli tomu nejde vytvořit cizí klíč.

Ještě jednou díky matej21.

quiced
Člen | 85
+
0
-

Ještě jeden detail by mě zajímal, a to konkrétně zda se dá doplnit ten select výraz

getProfitTypeTable()->group('profittype.type')->select('SUM(products:price) AS price_sum, profittype.type')

o podmínku pro tabulku products. Konkrétně bych potřeboval vybrat produkty podle id záznamů z další tabulky receivedinvoice. Navíc bych potřeboval vybrat záznamy z receivedinvoice pod podmínkou user->id.

Bohužel mě nenapadá jak něco podobného doplnit do původního selectu. Napadlo mě propojit si opět pomocí cizích klíčů tabulku receivedinvoice a products.

Image and video hosting by TinyPic
quiced
Člen | 85
+
0
-

Tak problém jsem nakonec vyřešil vytvořením řádku userid v tabulce products. Takže ještě jednou díky za pomoc.