各位前輩好:
請問要如何下SQL語法,可以達到『列出還可以購買 "喵喵貓食" 的店家資料』
(1)搜尋[商品table]的商品、
(2)列出[店家table]的資料為主畫面,陳列有吻合該商品的店家。
(3)找出的店家的商品不應該為售完狀態,若庫存為0就不被搜尋出來了。
以下是我推估的方法,但是一直無法補完整的語法...
sql="
SELECT 店家.name,商品.* FROM 店家
LEFT JOIN 商品 ON 商品.name = "喵喵貓食"
AND ( SELECT SUM(售出資料.selled) where 售出資料.pid=商品.pid )
.... ....
"
店家table
sid name site
101 A店家 台北市
102 B店家 高雄市
105 C店家 高雄市
商品table
pid sid name storage(存量/個)
301 101 汪汪狗食 5
302 101 喵喵貓食 3
303 105 喵喵貓食 3
305 102 汪汪狗食 3
306 102 喵喵貓食 10
307 102 吼吼飼料 10
售出資料table
sellid sid pid time selled(售出/個)
1 101 301 2014/11/10 1
2 102 306 2014/11/10 8
3 102 305 2014/11/10 3
4 105 303 2014/11/10 1
5 105 303 2014/11/10 2
---列出所有店家SQL語法
$result = mysql_query("SELECT 店家.name FROM 店家 ");
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
echo $row[0];
}
構思流程:
1.使用者搜尋"喵喵貓食",先到 [商品table] 找到共3筆,pid={302,303,306}
並得知庫存量分別為 storage ={3,3,10} 個
SELECT 商品.storage FROM 商品 where name="喵喵貓食";
2.再到 [售出資料table] 查看已被賣出的數量
pid=302的被賣出0個 =>表示還有3個可被買
pid=303的被賣出3個 =>表示已售罄
pid=306的被賣出8個 =>表示還有2個可被買
SELECT SUM(售出資料.selled) FROM 售出資料 group by sid having sum(selled) > 0
3.從步驟2得知只剩下 2家店有多的商品,pid={302,306}
並藉由此pid找出 店家ID,也就是sid ={101,102}
接著只要就是到 [店家table]找出 吻合sid的 店家.name
SELECT 店家.name FROM 店家 where 店家.sid in {101,102}
4.完成
select m.pid, m.sid, m.name, m.storage, nvl( (select sum(s.selled) from 售出資料table s where s.sid = m.sid and s.pid = m.pid ) ,0) selled from 商品table m where m.name = '喵喵貓食' and m.storage - nvl( (select sum(s.selled) from 售出資料table s where s.sid = m.sid and s.pid = m.pid ) ,0) >0
PID SID NAME STORAGE SELLED 302 101 喵喵貓食 3 0 306 102 喵喵貓食 10 8
先更新庫存table數量
再select數量大於0的sid
yafuu168提到:
只是台灣似乎習慣使然,
還是會想隨時記錄起來最即時的庫存,以便select數量大於0的sid嗎?
所以應該很多企業有做這種客製吧!
select m.pid, m.sid, m.name, m.storage, IFNULL( (select sum(s.selled) from sold s where s.sid = m.sid and s.pid = m.pid ) ,0) selled from prod m where m.name = '喵喵貓食' and m.storage - IFNULL( (select sum(s.selled) from sold s where s.sid = m.sid and s.pid = m.pid ) ,0) >0
albertachen提到:
select * from (
select m.pid, m.sid, m.name, m.storage,
nvl( (select sum(s.selled)
from 售出資料table s
where s.sid = m.sid
and s.pid = m.p...(恕刪)
Oracle 作法供參考~
<pre class="c" name="code">select m.pid, m.sid, m.name, m.storage,
nvl( (select sum(s.selled)
from 售出資料table s
where s.sid = m.sid
and s.pid = m.pid ) ,0) selled
from 商品table m
where m.name = '喵喵貓食'
and m.storage -
nvl( (select sum(s.selled)
from 售出資料table s
where s.sid = m.sid
and s.pid = m.pid ) ,0) >0
恭喜你自己改成mysql版成功。