iT邦幫忙

0

關聯性數據表的原理?

假設有商品數據表、用戶數據表
當我要製作購物車
我要顯示購物車所以有個購物車數據表
用戶的行為是加入這個商品進去購物車
但是我在購物車我要怎麼顯示才對?
我想到兩種方法
第一個是用戶加入之後順便帶入該商品的名稱等資訊到購物車數據表
然後再根據用戶的ID去撈他的購物車
但這方法假設商品改了資訊,所有東西也要跟著改

第二個方法是只帶入兩種值
一個是商品ID,一個是用戶的ID
但商品ID裡面有包括商品名稱 圖示
那這樣我要怎麼將購物車顯示?我能抓到的數據只有商品ID、用戶ID
我要怎麼關聯到另一個數據表?
根據商品ID,去抓商品數據表,再將商品資訊顯示?
這樣就不會有源頭修改商品資訊的更新問題
但這個方法我不知道怎麼顯示?

我是偏向第二種
但方式可能是迴圈裡面又一個迴圈
我需要更好的方式

看更多先前的討論...收起先前的討論...
slime iT邦大師 1 級 ‧ 2018-06-26 16:29:39 檢舉
你的資料表/資料庫是選用哪種軟體/工具?
fillano iT邦超人 1 級 ‧ 2018-06-26 16:51:11 檢舉
你會用JOIN嗎?
asys0512 iT邦研究生 5 級 ‧ 2018-06-26 16:52:10 檢舉
phpmyadmin
asys0512 iT邦研究生 5 級 ‧ 2018-06-26 16:52:48 檢舉
我會但是不熟,因為我是要用 php 呈現,他會不會是迴圈又一個迴圈?
froce iT邦高手 1 級 ‧ 2018-06-27 09:09:37 檢舉
這時候就能見識到ORM和框架的威力了,像我用Django只要把購物車設定user和item外鍵,然後利用ORM搭配template去做呈現就好。

要不然就得像下面的一樣,用sql去做join。

1 個回答

2
Homura
iT邦研究生 3 級 ‧ 2018-06-26 17:10:59
最佳解答

使用Sql的join就行
例如我有3張表User(用戶).Cart(購物車).Goods(商品)

User

uid name
1 1號用戶
2 2號用戶

Goods

gid gname
1 巧克力
2 棉花糖

Cart

cid uid gid
1 1 1
2 1 2
3 2 2

然後Sql Join起來

SELCT c.id,u.name,g.gname FROM Cart AS c
LEFT JOIN Goods AS g ON c.gid=g.gid 
LEFT JOIN User AS u ON c.uid=u.uid

拉出來後應該會變這樣

cid uname gname
1 1號用戶 巧克力
2 1號用戶 棉花糖
3 2號用戶 棉花糖
看更多先前的回應...收起先前的回應...
asys0512 iT邦研究生 5 級 ‧ 2018-06-27 10:44:51 檢舉

我這樣寫但是沒有出現東西?

SELECT b.icon, b.name FROM user_cart as c
LEFT JOIN product as b ON c.prod_id = b.prod_id
LEFT JOIN user AS a ON a.id = c.id

我想印出 product b 的 icon, name
這樣寫我發現沒有東西?
確定數據表有資料

Homura iT邦研究生 3 級 ‧ 2018-06-27 10:51:16 檢舉

asys0512
你的資料行名稱和資料也給一下吧!!
這樣看不出來@@

asys0512 iT邦研究生 5 級 ‧ 2018-06-27 11:14:48 檢舉

user 有 id
user_cart 有 prod_id, id
product 有 prod_id, name, icon

我顯示是這樣寫

<? while($row = mysqli_fetch_array($data, MYSQL_ASSOC)){?>
        <?=$row['name'];?>
      <?}?>

我的 mysql 查詢是

SELECT b.icon, b.name FROM user_cart as c
      LEFT JOIN product AS b ON c.prod_id = b.id
      Where c.user_id= '{$_SESSION["user-id"]}'
asys0512 iT邦研究生 5 級 ‧ 2018-06-27 11:15:16 檢舉

又或者是

SELECT b.* FROM product as b
      LEFT JOIN user_cart as c ON c.prod_id = b.prod_id
      LEFT JOIN user AS a ON a.id = c.id
      WHERE c.id = '{$_SESSION["user-id"]}'
asys0512 iT邦研究生 5 級 ‧ 2018-06-27 11:19:24 檢舉

確定 $_SESSION["user-id"] 正確,也確定資料表數據是對的

asys0512 iT邦研究生 5 級 ‧ 2018-06-27 11:27:12 檢舉

我的資料庫結構
https://imgur.com/a/BrEOuNt

Homura iT邦研究生 3 級 ‧ 2018-06-27 11:35:03 檢舉

asys0512
http://sqlfiddle.com/#!9/258118/4
看起來是對的
還是你有表沒資料或是你查的user-id沒資料
可以去你的phpmyAdmin直接執行sql看看

Homura iT邦研究生 3 級 ‧ 2018-06-27 11:40:27 檢舉

asys0512
你的

SELECT b.icon, b.name FROM user_cart as c
      LEFT JOIN product AS b ON c.prod_id = b.id
      Where c.user_id= '{$_SESSION["user-id"]}'

product也有id?
不是應該是b.prod_id?

asys0512 iT邦研究生 5 級 ‧ 2018-06-27 11:54:37 檢舉

我用 sql 查詢是有的
SELECT * FROM user_cart as c
LEFT JOIN product AS b ON c.prod_id = b.prod_id
Where c.id = '16'

  好怪喔,看來是顯示的代碼有問題?
Homura iT邦研究生 3 級 ‧ 2018-06-27 12:01:02 檢舉

asys0512
開發程式常遇到!XD
以後記得都記得都先執行SQL看看
不然看不出是程式還是SQL問題

asys0512 iT邦研究生 5 級 ‧ 2018-06-27 12:34:44 檢舉

感謝

我要發表回答

立即登入回答