台灣最大程式設計社群網站
線上人數
930
 
會員總數:244893
討論主題:188887
歡迎您免費加入會員
討論區列表 >> MySQL >> [求助]如何在一個table裡判斷兩個不同table 的關聯
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
[求助]如何在一個table裡判斷兩個不同table 的關聯
價值 : 150 QP  點閱數:571 回應數:8

樓主

蘇格
門外漢
0 1
34 4
發送站內信

各位高手好,小弟初入SQL有許多不懂的地方要向各位高手請教,盼版上高手能給予指點

此程式目的是要抓取使用者的活動歷程,進而與總題目配對,抓取出沒有做過的題目,在進行自動分配任務

使用指資料存放 DB: user table: member

活動歷程存放 DB: mi2 table: mission_log

總任務存放 DB: mi2 table: new_mission


#1 為抓取使用者做過的活動,程式是可以順利執行的
利用 member.uid INNR JOIN mission_log.uid 來定位使用者
接者 mission_log.uid INNR JOIN new_mission 來抓出該使用者的活動歷程



#2 判別出使用者沒做過的任務
我的想法是利用 #1的敘述來使用
(LEFT JOIN new_mission.missionid ON mission_log.mission_id )
但無法成功
以下附上錯誤資訊
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'new_mission'' in /Applications/XAMPP/xamppfiles/htdocs/mi2/php/auto_assign_mission.php:82 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/mi2/php/auto_assign_mission.php(82): PDOStatement->execute(Array) #1 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/mi2/php/auto_assign_mission.php on line 82



搜尋相關Tags的文章: [ mysql ] , [ left ] , [ join ] , [ inner ] ,
本篇文章發表於2018-12-18 04:02
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

彩虹
檢舉此回應
你注意 #2 的 10、11 行


你 inner join 跟 left join 都使用了「 mi2.new_mission」 這張表,所以會發生 Not unique table/alias
如果要對同一張表做 join,請務必將另一行加上別名,例如

INNER JOIN mi2.new_mission ON `new_mission`.`mission_id` = `mission_log`.`mission_id`
LEFT JOIN mi2.new_mission as XXX ON `as XXX`.`mission_id` = `mission_log`.`mission_id`
本篇文章回覆於2018-12-18 09:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

彩虹
檢舉此回應
剛上面打錯,重新貼一次
LEFT JOIN mi2.new_mission as XXX ON `XXX`.`mission_id` = `mission_log`.`mission_id`
本篇文章回覆於2018-12-18 09:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

蘇格
檢舉此回應
回覆彩虹大:

感謝您的回覆,這樣一來錯誤沒了,但是沒有東西跑出來><
想另外請教彩虹大,我的需求有點像是這一篇 http://www.blueshop.com.tw/board/FUM20041006152735ZFS/BRD20110622182404IPT.html
但是當我在from加上()的寫法是不能被執行的,請問這樣的寫法是可以的嗎?
本篇文章回覆於2018-12-18 23:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

蘇格
檢舉此回應
這是我最新的寫法,但這並沒有與使用者做連動,請問使用者的資訊我該加在哪裡呢?


本篇文章回覆於2018-12-19 04:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

彩虹
檢舉此回應
你可以提供一下資料表結構跟範例資料嗎∼
列出來會比較清楚
本篇文章回覆於2018-12-19 10:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

蘇格
檢舉此回應
回彩虹大,以下為我資料庫大概的表示方式,


DB: user, table: member(使用者資訊)


DB: mi2, table: mission_log(記錄每位使用者活動歷程)


DB: mi2, table: new_mission(存放全部任務)


我是想以使用者 member.uid 去抓取 mission_log.uid 對應的mission_log.mission_id
接著再以LEFT JOIN的方式呈現出使用者「沒做過的題目」
本篇文章回覆於2018-12-19 12:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
最有價值解答

彩虹
檢舉此回應
其中一個做法,你可以透過 select * from AAA left join (select xxx from yyy) as BBB on BBB.mission_id=AAA.mission_id 的方式來做
括號裡面
1.你可以先把 member 與 mission 兩個資料表先 join 起來,然後給資料表新的別名
2.再去跟 new_mission 做 join

下面範例你可以參考一下

本篇文章回覆於2018-12-19 22:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

蘇格
檢舉此回應
謝謝彩虹大,成功抓出我要的東西了,您的指導十份受用!!
本篇文章回覆於2018-12-20 23:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.