iT邦幫忙

0

請問如何在查詢MYSQL時做加減

php


請問如何在查詢MYSQL時做加減的動作
最後能得到
地點1=-10
地點2=10
然後顯示在螢幕上該選擇哪個欄位名稱

看更多先前的討論...收起先前的討論...
樓主你到底要做什麼??
我完全看不懂耶汗
起點 終點我上次有跟你說join
不過這次你發問我還是有點搞不清楚您要表達什麼疑惑
kushu iT邦新手 5 級 ‧ 2014-08-09 23:40:04 檢舉
汗
我覺得我們是2個星球的人

上次的JOIN先謝了 我在那個討論裡有把成功的語法寫上了
這次我遇到的問題是
我要計算紀錄裡面貨物的數量
如果我用SUM 只能計算總數
但是起點應該是減 終點應該是加
還有要如何把每個倉庫分開計算呢謝謝
樓主您這樣錯就有點問題嚕!!
我先講一下我的見解!
您是否要做一個出貨入庫的系統??
一張訂單 一批貨物 貨物狀態 所屬倉庫
這四句話可以想想,
在回答我您想到什麼,我們在深入研究!!
kushu iT邦新手 5 級 ‧ 2014-08-10 23:02:27 檢舉
chingfeng提到:
一張訂單 一批貨物 貨物狀態 所屬倉庫


是一張貨運單 從台北到台中 貨物數量

要查各倉庫貨物數量

貨運單我弄好了倉庫名也弄好了 但是統計各倉庫貨物數量不會弄
目前只查到SUM.但這只能全部加總.沒辦法把載走的減掉
給樓主的一句話:
麻煩起點1跟起點2的JOIN表一起PO上來,
貨物狀態.....
這個我有講
來月光寶盒給你,再去想想!!
kushu iT邦新手 5 級 ‧ 2014-08-11 08:35:37 檢舉
倉庫表 warehouse

貨運單 car_save

想要按查尋的時候出現
kushu iT邦新手 5 級 ‧ 2014-08-13 08:46:30 檢舉
關於ci.input - co.output
不好意思
您提供的語法ci.input - co.output
在記錄單內如果
car_out 都是1
car_in 都是2
程式會輸出為空 NULL
請問如何解決

wonton iT邦高手 6 級 ‧ 2014-08-13 08:52:49 檢舉
如果你的資料庫是使用 MySQL,可以使用 ifnull 函數
(ifnull(ci.input, 0) - ifnull(co.output, 0))

如果資料庫是使用 MSSQL,則可以使用 isnull 函數來取代 ifnull 函數
kushu iT邦新手 5 級 ‧ 2014-08-13 10:17:16 檢舉
wonton提到:
(ifnull(ci.input, 0) - ifnull(co.output, 0))


再請教 如果有多種貨物 如何一次算多欄位

我把A01.A02加到JOIN裡面結果不行
wonton iT邦高手 6 級 ‧ 2014-08-13 15:22:50 檢舉
SELECT 
    warehouse_id, 
    warehouse_name, 
    (ifnull(ci.all_in, 0) - ifnull(co.all_out, 0)) warehouse_amount,
    (ifnull(ci.A01_in, 0) - ifnull(co.A01_out, 0)) A01_amount,
    (ifnull(ci.A02_in, 0) - ifnull(co.A02_out, 0)) A02_amount,
FROM warehouse
LEFT JOIN (
    SELECT car_in, SUM(amount) all_in, SUM(A01) A01_in, SUM(A02) A02_in 
    FROM car_save 
    GROUP BY car_in
) ci ON ci.car_in = warehouse.warehouse_id
LEFT JOIN (
    SELECT car_out, SUM(amount) all_out, SUM(A01) A01_out, SUM(A02) A02_out 
    FROM car_save 
    GROUP BY car_out
) co ON co.car_out = warehouse.warehouse_id
wonton iT邦高手 6 級 ‧ 2014-08-13 15:32:05 檢舉
A02_amount 後面不小心多打了一個 "," 逗號
kushu iT邦新手 5 級 ‧ 2014-08-13 15:44:13 檢舉
我把您的語法丟到PHPMYADMIN執行 出現錯誤
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM warehouse LEFT JOIN ( SELECT car_in, SUM(amount) all_in, SUM(A01) A' at line 7
kushu iT邦新手 5 級 ‧ 2014-08-13 15:50:25 檢舉
02_amount
可以用了
結果是我要的 感恩 謝謝您
計算結果欄位名稱是A01_amount怎麼不是出現為A01??
kushu iT邦新手 5 級 ‧ 2014-08-13 15:55:33 檢舉
我知道在哪改欄位名稱了 謝謝

2 個回答

10
wonton
iT邦高手 6 級 ‧ 2014-08-11 09:24:37
最佳解答

用 warehouse 當主表,JOIN 所有進 + 所有出,共兩個總量的 Table,然後作加減即可。

<pre class="c" name="code">SELECT warehouse_id, warehouse_name, (ci.input - co.output) warehouse_amount
FROM warehouse

LEFT JOIN (SELECT car_in, SUM(amount) input FROM car_save GROUP BY car_in) ci ON ci.car_in = warehouse.warehouse_id

LEFT JOIN (SELECT car_out, SUM(amount) output FROM car_save GROUP BY car_out) co ON co.car_out = warehouse.warehouse_id

看更多先前的回應...收起先前的回應...
kushu iT邦新手 5 級 ‧ 2014-08-11 10:10:35 檢舉

謝謝您
最後的結果是我要的沒錯
不好意思我是初學者剛用Dreamweaver
大大一下多了好多我沒見過的語法
SELECT 的語法內 (ci.input - co.output) 這是什麼意思呢?
LEFT JOIN (SELECT car_in, SUM(amount) input FROM car_save GROUP BY car_in) ci ON ci.car_in = warehouse.warehouse_id
製作一個左表 計算car_in內各倉庫的數量
之後的ci ON car_in = warehouse.warehouse_id 這是什麼意思呢?
所以您po的最後一張圖表 是運算出來的我看不到的 還是我要自己去設一張表讓程式去填資料
一下無法消化 還請大大解釋一下 謝謝

wonton iT邦高手 6 級 ‧ 2014-08-11 10:31:05 檢舉
  1. SELECT 的語法內 (ci.input - co.output) 這是什麼意思呢?
    底下 JOIN 了兩張表,
    第一張表我命名為 ci, 用來計算 car_in 的總量, 總量我命名為 input
    第二張表我命名為 co, 用來計算 car_out 的總量, 總量我命名為 output
    這兩張表 JOIN 進來後, 就可以拿來作加減, 所以 SELECT (ci.input - co.output)

  2. ci ON car_in = warehouse.warehouse_id 這是什麼意思呢?
    ci 只是把 (SELECT car_in, SUM(amount) input FROM car_save GROUP BY car_in) 這一段產生的資料作一個命名而已, 後面的 ON 是 JOIN 的資料表和主表 warehouse 的 key 值對照

  3. 最後一張圖表, 是實際執行這段 SQL 語句的結果, 我把你討論區的兩張表建入我的資料庫中, 然後執行我貼的 SQL 語句, 就產出這個結果

建議買本 SQL 的書或去上個資料庫的課程吧, 勞動部補助的在職課程不少

kushu iT邦新手 5 級 ‧ 2014-08-11 10:56:52 檢舉

謝謝您詳細的解說
問題1.2我看懂了
所以問題3是執行的結果.實際上是不會出現那張表的.對嗎?
還是說我一樣要新增一個表warehouse讓程式算出的值去填表?
不好意思請見諒.我不是偷懶 書我買了好幾本.GOOGLE也打到快爛了
書教的都是很基本的只查到SUM沒寫說怎麼加減

最後還是謝謝您詳細的解答

kushu iT邦新手 5 級 ‧ 2014-08-11 13:08:34 檢舉

插入Dreamweaver出錯了
<?php
mysql_select_db($database_changli, $changli);
$query_AA = "SELECT warehouse_id, warehouse_name, (ci.input - co.output) warehouse_amount FROM warehouse LEFT JOIN (SELECT car_in, SUM(amount) input FROM car_save GROUP BY car_in) ci ON ci.car_in = warehouse.warehouse_id LEFT JOIN (SELECT car_out, SUM(amount) output FROM car_save GROUP BY car_out) co ON co.car_out = warehouse.warehouse_id";
$AA = mysql_query($query_AA, $changli) or die(mysql_error());
$row_AA = mysql_fetch_assoc($AA);
$totalRows_AA = mysql_num_rows($AA);
?>

錯誤訊息
Unknown column 'amount' in 'field list'

wonton iT邦高手 6 級 ‧ 2014-08-11 13:39:35 檢舉

我看你的截圖應該有使用 phpMyAdmin,可以先把 SQL 語句丟去執行看看,按照錯誤訊息來看,是說你的資料表中沒有 amount 這個欄位,但是看你的截圖又有,所以很奇怪...

除非你的 $database_changli 裡面的資料表和貼的圖不一樣。

kushu iT邦新手 5 級 ‧ 2014-08-11 14:01:24 檢舉

SORRY 我真的在貼圖後有改過資料表
現在改回跟貼圖一樣
在PHPMYADMIN內測試的結果跟大大您的圖一樣了
最後可以麻煩大大告訴我 我應該把這段程式碼 放在Dreamweaver的哪裡
我用資料集 無法顯示在螢幕上 但也沒有報錯
謝謝

kushu iT邦新手 5 級 ‧ 2014-08-11 14:32:15 檢舉

謝謝 wonton
我弄出來了

4
老鷹(eagle)
iT邦高手 1 級 ‧ 2014-08-11 09:08:03

討論區您回答的

既然這樣!
我想說一下,你是否要給該訂單一個欄位.
叫做訂單狀態,或者是貨物狀態,來做貨物目前的狀態
EX:出庫 運送 已入庫
SUM是對的,友情提示 WHERE,GROUP BY偷笑

看更多先前的回應...收起先前的回應...
kushu iT邦新手 5 級 ‧ 2014-08-11 09:17:46 檢舉

目前沒有使用狀態攔 因為單子都是簽收後才登記
WHERE,GROUP BY 是使用群組嗎
那群組運算的語法怎麼寫
GROUP BY 1 - GROUP BY 2
應該沒我想的這麼簡單吧偷笑

kushu iT邦新手 5 級 ‧ 2014-08-11 09:23:07 檢舉

SELECT car_out, SUM(amount)
FROM car_save
GROUP BY car_out;
這樣好像只能算出1.2載出的數量疑惑

kushu提到:
SELECT car_out, SUM(amount)
FROM car_save
GROUP BY car_out;

那car_in
偷笑

我這樣講好了!
car_in是否等於入庫倉??
car_out是否等於發貨倉??
要算各倉庫 發貨 與 入庫的數量??

kushu iT邦新手 5 級 ‧ 2014-08-11 09:52:41 檢舉

car_in 等於入庫倉
car_out 等於發貨倉
只要算倉庫現有物品的數量

wonton大神阿簽名簽名筆記筆記

我要發表回答

立即登入回答