![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 蘇格 ![]()
![]() |
此程式目的是要抓取使用者的活動歷程,進而與總題目配對,抓取出沒有做過的題目,在進行自動分配任務 使用指資料存放 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 |
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
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |