anonīms Posted September 20, 2012 Report Share Posted September 20, 2012 Kverijs: http://paste.php.lv/97eac3bafb15a1fc0cf15cef4ebef1a1?lang=php DB struktūra un dati: Reāli dati tiek izvadīti: title nid STATUS shows clicks *** 86 1 26460 182 kur varētu būt problēma, ka shows un arī clicks(to neuzskaitīju) parāda tādā daudzumā? ja izmantoju tikai vienu joinu, tad viss ir kārtībā. Nu pat idejas īsti nav prātā kāpēc kkas tāds notiek. Link to comment Share on other sites More sharing options...
aaxc Posted September 20, 2012 Report Share Posted September 20, 2012 Man izskatās. ka tas tāpēc, ka WHERE parametrs ir norādīts tikai vienam no abiem joiniem. Link to comment Share on other sites More sharing options...
anonīms Posted September 20, 2012 Author Report Share Posted September 20, 2012 kā var būt norādīts viens, ja abi tiek piejoinoti ar sakritību = node.nid? Parēķinājām - sanāk, ka beigās tas skaitlis 14x palielinās un tieši tik daudz rowi ir tabulā sakarā ar to id (86). Itkā varētu rakstīt iekšējo selectu (select blabla, ada, (select adlad from ada) as ada), bet tas nav tas uz ko es tēmēju Link to comment Share on other sites More sharing options...
aaxc Posted September 20, 2012 Report Share Posted September 20, 2012 (edited) Sorry, nvm tad; es neiebraucu, kas tev ir nepieciešams. Edited September 20, 2012 by aaxc Link to comment Share on other sites More sharing options...
xPtv45z Posted September 20, 2012 Report Share Posted September 20, 2012 (edited) Es vairs neatceros, kā to sauca no teorijas viedokļa(kaut kāds rezinājums), bet ieliec selectā tikai * un apsakties uz rezultātu, tad gan jau sapratīsi, kāpēc tā veidojas. :) Bez subselectiem visticamāk neiztikt. UN subselecti tev nav jāliek obligāti iekš select, tu tos tik pat labi vari joinot ... JOIN (select sum(lauks), node_id from tabula group by node_id) as a on a.id = node.id ... Edited September 20, 2012 by xPtv45z Link to comment Share on other sites More sharing options...
Maris-S Posted September 20, 2012 Report Share Posted September 20, 2012 Ja nemaldos, to sauca par kopu reizināšanu. Link to comment Share on other sites More sharing options...
draugz Posted September 20, 2012 Report Share Posted September 20, 2012 (edited) UN subselecti tev nav jāliek obligāti iekš select, tu tos tik pat labi vari joinot ... JOIN (select sum(lauks), node_id from tabula group by node_id) as a on a.id = node.id ... Neesmu drošs, bet man liekas šinīg gadījumā sākumā ir fullscan priekš visas tabulas un pēc tam tikai rezultāts tiek piejoinons... ja tā tad ļoti neefektīvs tieši konkrētajām vajadzībām jo banneru ieraksti vienmēr ir daudz :) Bez subselectiem pirmais, kas nāk prātā ir UNION :) tiesa šim varētu būt problēmas, ja ir nepieciešami kādi nosacījumi no node tabulas (SELECT banner_id, 'banner_show', SUM( cbanner_shows.shows ) count FROM cbanner_shows WHERER bannerer_id in(86) group by banner_id) UNION (SELECT banner_id, 'banner_click', SUM( cbanner_clicks.shows ) count FROM cbanner_clicks WHERER bannerer_id in (86) group by baner_id) Tiesa rezultāti tiks atgriezti vertikālā formā 86, 'banner_show', X 86, 'banner_click', Y Ja vienmēr tiek pieprasīts tikai viens baneris, var droši neselectēt nemaz to banner_id kolonu un nosaucījumā likt banner_id = 86 :) Edited September 20, 2012 by draugz Link to comment Share on other sites More sharing options...
draugz Posted September 20, 2012 Report Share Posted September 20, 2012 (edited) Pamēģini šo mistisko pieprasījumu, varbūt strādā pareizi :) SELECT SUM( cbanner_shows.shows ) / count(cbanner_clicks.banner_id) AS shows, SUM( cbanner_clicks.clicks ) AS clicks FROM node LEFT JOIN cbanner_shows ON cbanner_shows.banner_id = node.nid LEFT JOIN cbanner_clicks ON cbanner_clicks.banner_id = node.nid WHERE node.nid =86 Edited September 20, 2012 by draugz Link to comment Share on other sites More sharing options...
marrtins Posted September 20, 2012 Report Share Posted September 20, 2012 Nav ko tur daudz ņemties: SELECT (SELECT SUM(shows) FROM cbanner_shows WHERE banner_id = 86) AS shows, (SELECT SUM(clicks) FROM cbanner_clicks WHERE banner_id = 86) AS clicks Link to comment Share on other sites More sharing options...
krikulis Posted September 20, 2012 Report Share Posted September 20, 2012 Ja nemaldos, to sauca par kopu reizināšanu. akadēmiskais termins ir dekarta reizinājums. Par tēmu - pieliec beigās GROUP BY node.nid. Link to comment Share on other sites More sharing options...
anonīms Posted September 21, 2012 Author Report Share Posted September 21, 2012 krikulis, group by neko nebūtu devis :) bet nu jā, palieku tad pie subkveriju kverija, lai kā arī to negribētos :/ Paldies par atbildēm. Link to comment Share on other sites More sharing options...
Recommended Posts