2015-12-14 89 views
0

我的兩個查詢:如何將兩個查詢與不同的WHERE/LIKE條件結合起來?

$compareTotals1 = mysqli_query($con," 
    SELECT *, (SUM(rent_amount)+SUM(late_fees)-SUM(discount_amount)) AS total, 
       SUM(late_fees) AS latefees, 
       SUM(discount_amount) AS discounts 
    FROM  transaction 
    WHERE  paid_on LIKE '%2014%' 
"); 
$compareTotals2 = mysqli_query($con," 
    SELECT *, (SUM(rent_amount)+SUM(late_fees)-SUM(discount_amount)) AS total, 
       SUM(late_fees) AS latefees, 
       SUM(discount_amount) AS discounts 
    FROM  transaction 
    WHERE  paid_on LIKE '%2015%' 
"); 

我如何輸出結果:

if ($row = mysqli_fetch_array($compareTotals1)) { 
    echo CURRENCY.number_format($row['total'],2); 
    echo CURRENCY.number_format($row['latefees'],2); 
    echo CURRENCY.number_format($row['discounts'],2); 
} else { 
    echo "No Records."; 
} 

if ($row = mysqli_fetch_array($compareTotals2)) { 
    echo CURRENCY.number_format($row['total'],2); 
    echo CURRENCY.number_format($row['latefees'],2); 
    echo CURRENCY.number_format($row['discounts'],2); 
} else { 
    echo "No Records."; 
} 

paid_on LIKE '% %'通過下拉框和一些JavaScript動態生成的。這是變化的唯一部分。

我怎樣才能凝結成一個查詢這個,所以我只需要使用一個mysqli_fetch_array

+1

使用'Union'功能 – xQbert

+0

,如果你有超過生成查詢的JavaScript控件,只需添加一個OR子句...... WHERE paid_on LIKE'%2015%'或paid_on LIKE'%2014%'' – pkm

+0

您是否需要這兩個查詢?如果下拉框填寫年份,那麼您只需要其中一個查詢,但它會使用下拉列表中的年份...是的? –

回答

1

假設你想多行工會很可能在清潔

$compareTotals1 = mysqli_query($con," 
    SELECT *, (SUM(rent_amount)+SUM(late_fees)-SUM(discount_amount)) AS total, 
       SUM(late_fees) AS latefees, 
       SUM(discount_amount) AS discounts, 
       '2014' as Yr 
    FROM  transaction 
    WHERE  paid_on LIKE '%2014%' 
    UNION ALL 
    SELECT *, (SUM(rent_amount)+SUM(late_fees)-SUM(discount_amount)) AS total, 
       SUM(late_fees) AS latefees, 
       SUM(discount_amount) AS discounts, 
       '2015' as Yr 
    FROM  transaction 
    WHERE  paid_on LIKE '%2015%' 
"); 

您可以到這裏的合併成一個OR並確保通過拼出一組或你不會知道這是2015年或2014年,除非*包括這些細節。

$compareTotals1 = mysqli_query($con," 
    SELECT *, (SUM(rent_amount)+SUM(late_fees)-SUM(discount_amount)) AS total, 
       SUM(late_fees) AS latefees, 
       SUM(discount_amount) AS discounts, 
       case when paid_on like '%2014%' then '2014' 
        when paid_on like '%2015%' then '2015' end as yr 
    FROM  transaction 
    WHERE  paid_on LIKE '%2014%' 
     OR  paid_on LIKE '%2015%' 
    --GROUP BY all fields from select relevant to group by... without structure and sample data from table can't figure out. 
    -- This might work though I'd be concerned all the * columns could be returning improper results. 
    GROUP BY case when paid_on like '%2014%' then '2014' when paid_on like '%2015%' then '2015' end 
"); 

也許...... group by case when paid_on like '%2014%' then '2014' when paid_on like '%2015%' then '2015' end但是這是非常具體的。

,我們也許能夠按paid_on,但它似乎它不只是一年...所以你可能會得到每年多行......如此反覆,而不對結構的樣本數據想不出該怎麼辦。

或者,也許你想要一個交叉連接更多的列...不...行

$compareTotals1 = mysqli_query($con," 
    Select * from (
    SELECT *, (SUM(rent_amount)+SUM(late_fees)-SUM(discount_amount)) AS total, 
       SUM(late_fees) AS latefees, 
       SUM(discount_amount) AS discounts 
    FROM  transaction 
    WHERE  paid_on LIKE '%2014%') CROSS JOIN 

    (SELECT *, (SUM(rent_amount)+SUM(late_fees)-SUM(discount_amount)) AS total, 
       SUM(late_fees) AS latefees, 
       SUM(discount_amount) AS discounts 
    FROM  transaction 
    WHERE  paid_on LIKE '%2015%') B 
"); 
+0

'UNION'應該能夠準確得到你想要的,但速度通常較慢。如果你能用'OR'得到你想要的東西,那應該會更好。 – Umbrella

+0

在大多數情況下,我可能會同意。然而在特定情況下''或''可以比'union'***更慢。 – xQbert

+0

有一次,我使用'OR',但是我沒有使用'GROUP BY'這可能是我的問題。有什麼辦法可以將一個別名與'WHERE'關聯起來並在'$ row [ '總']'? –

0

爲什麼不在你的WHERE中使用OR?

$compareTotals1 = mysqli_query($con," 
    SELECT *, (SUM(rent_amount)+SUM(late_fees)-SUM(discount_amount)) AS total, 
       SUM(late_fees) AS latefees, 
       SUM(discount_amount) AS discounts 
    FROM  transaction 
    WHERE  paid_on LIKE '%2014%' 
     OR  paid_on LIKE '%2015%' 
    GROUP BY YEAR(paid_on) -- is `paid_on` a date? 
"); 
+0

因爲這會導致1記錄不是2沒有一個組(假設默認mySQL擴展組是由就地組成),並且按pay_on分組將不起作用,因爲paid_on可能是%2014藍%%2014 Red%然後我們'當每年出現多行時,只有2行可能是需要的。 – xQbert

相關問題