Autor | Zpráva | ||
---|---|---|---|
ludvalb Profil |
#1 · Zasláno: 7. 11. 2012, 09:17:09
Zdravím, potřeboval bych poradit. Mám následující kod a potřeboval bych aby řazení probíhalo ze součtu obou tabulek. Nyní mi to řadí jen podle sum z jedné tabulky. Vím, že takto jak to mám zapsané je to myšleknově špatně, ale bohužel se mi nepodařilo přijít na to jak to zapsat správně.
$str=$_GET["str"]; if($str==""){ $limit="0,50"; }else{ $limit=$str; } echo '<P>'; echo '<table style="border: solid 1px; width:700px">'; echo '<tr><th>nazev</th><th>kusu</th></tr>'; $query = mysql_query('SELECT produktID, sum(ks_prodej) as ks from deni_prehled UNION ALL SELECT produktID, sum(ks_prodej) as ks from zaloha_deni_prehled WHERE autoID<0 AND date!="0000-00-00" GROUP BY produktID ORDER BY ks DESC LIMIT '.$limit); for ($i = 1;$i< mysql_num_rows($query);$i++) { $produktID = mysql_result($query,$i,'produktID'); $sql = MySQL_Query("SELECT sum(ks_prodej) as ks FROM deni_prehled WHERE produktID=".$produktID." AND autoID<0"); $sql1 = MySQL_Query("SELECT sum(ks_prodej) as ks FROM zaloha_deni_prehled WHERE produktID=".$produktID." AND autoID<0"); $sql2 = MySQL_Query("SELECT nazev FROM prodej WHERE autoID=".$produktID); $sql3 = MySQL_Query("SELECT ks, produktID FROM koupeno_bez_dokladu WHERE produktID=".$produktID); for ($a = 0;$a< mysql_num_rows($sql);$a++) { $ks_prodej += mysql_result($sql,$a,'ks'); } for ($a = 0;$a< mysql_num_rows($sql);$a++) { $ks_prodej_zaloha += mysql_result($sql1,$a,'ks'); } for ($b = 0;$a< mysql_num_rows($sql3);$a++) { $ks_koupeno_bez_dokladu += mysql_result($sql3,$a,'ks'); } $ks_prodano_bez_dokladu_aktualne = $ks_prodej+$ks_prodej_zaloha-$ks_koupeno_bez_dokladu; $nazev = mysql_result($sql2,0,'nazev'); echo '<tr class="radek'.($i%2).'"><td>'.$nazev.'</td><td>'.$ks_prodano_bez_dokladu_aktualne.'</td></tr>'; $ks_prodej = 0; $ks_prodej_zaloha = 0; $ks_koupeno_bez_dokladu = 0; } echo '</table>'; |
||
Tori Profil |
Řazení podle celkové sumy by mohlo vypadat rámcově takhle:
SELECT id, SUM(kusu) ks FROM (SELECT id, kusu FROM tab1) UNION ALL (SELECT id, kusu FROM tab2) GROUP BY id ORDER BY ks DESC Zkuste, jestli by bylo velmi pomalé, kdyby se to celé řešilo jedním dotazem (a jestli by vůbec takhle fungovalo): SELECT p.nazev, (IFNULL(SUM(d.ks_prodej), 0) + IFNULL(SUM(zd.ks_prodej), 0) - IFNULL(b.ks, 0)) kusu FROM prodej p LEFT JOIN deni_prehled d ON d.produktID = p.autoID AND d.autoID < 0 LEFT JOIN zaloha_deni_prehled zd ON zd.produktID = p.autoID AND zd.autoID < 0 LEFT JOIN koupeno_bez_dokladu b ON b.produktID = p.autoID GROUP BY p.autoID HAVING kusu > 0 ORDER BY kusu DESC LIMIT 0, 50 |
||
ludvalb Profil |
#3 · Zasláno: 7. 11. 2012, 10:29:16
Tak jsem zkusil přepsat ten SELECT na toto
$query = mysql_query('SELECT produktID, SUM(ks_prodej) ks, date FROM (SELECT produktID, ks_prodej FROM deni_zalohy UNION ALL SELECT produktID, ks_prodej FROM zaloha_deni_prehled) WHERE autoID<0 AND date!="0000-00-00" GROUP BY produktID ORDER BY ks DESC LIMIT '.$limit); a spoustu jiných možností, jako jsou závorky, bez WHERE a LIMITu a stále mi to hlásí Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /mnt/data/accounts/m/mujchovatel/data/www/prodej/prodane-bez-dokladu2.php on line 24 na řádku 24 je toto for ($i = 1;$i< mysql_num_rows($query);$i++) { takže by měla být chyba v tom selectu. |
||
Tori Profil |
#4 · Zasláno: 7. 11. 2012, 10:41:36
ludvalb:
Předpokládám, že chyba je neexistující sloupec autoID a date. Podmínku WHERE přesuňte/zkopírujte do obou vnitřních SELECTů. |
||
ludvalb Profil |
#5 · Zasláno: 8. 11. 2012, 15:20:04
Tak zatím jsem to nevyřešil, ale použil jsem tuto myšlenku jinde a chce to jen doplnit alias tabulky.
$query = 'SELECT * FROM ((SELECT * FROM deni_prehled) UNION ALL (SELECT * FROM zaloha_deni_prehled)) deni_prehled_virtual WHERE deni_prehled_virtual.autoID LIKE "'.$find.'"'; |
||
Časová prodleva: 11 let
|
0