我試圖創建一個排行榜,但我不知道如何執行mysql查詢。MYSQL PHP查詢中的多次計數
我想計算技能表中玩家的所有等級,並獲得總體等級並計算體驗表中玩家的所有經驗並獲得總體經驗值,並顯示用戶的人名柱。
有3個表factions_mcmmo_users,factions_mcmmo_experience,factions_mcmmo_skills。
這是我迄今爲止,但它不工作:
$sql = ("SELECT a.id,
(SELECT COUNT(*) FROM factions_mcmmo_experience WHERE user_id = a.id) as TotalXP,
(SELECT COUNT(*) FROM factions_mcmmo_skills WHERE user_id = a.id) as TotalLevel
FROM (SELECT DISTINCT id FROM factions_mcmmo_users) a LIMIT 10;");
任何幫助將是非常讚賞
編輯:我現在的工作,但我不能確定它是最有效的做事方式,所以如果任何人都可以幫助我,如果有更好的方法,這將意味着很多。
我也想知道是否有可能用逗號顯示總exp和水平,如果數字是在數千例如:總水平5882和總XP 582882
編輯2: 我想通了如何格式化數字,但仍然不知道如果我的代碼是有效的
$sql = ("SELECT id, user,
(SELECT FORMAT(Sum(taming)+Sum(mining)+Sum(woodcutting)+Sum(repair)+Sum(unarmed)+Sum(herbalism)+Sum(excavation)+Sum(archery)+Sum(swords)+Sum(axes)+Sum(acrobatics)+Sum(fishing)+Sum(alchemy),0) FROM factions_mcmmo_skills b WHERE b.user_id = a.id) as TotalLevel,
(SELECT FORMAT(Sum(taming)+Sum(mining)+Sum(woodcutting)+Sum(repair)+Sum(unarmed)+Sum(herbalism)+Sum(excavation)+Sum(archery)+Sum(swords)+Sum(axes)+Sum(acrobatics)+Sum(fishing)+Sum(alchemy),0) FROM factions_mcmmo_experience c WHERE c.user_id = a.id) as TotalXP
FROM (SELECT id, user FROM factions_mcmmo_users) a group by id ORDER BY TotalLevel DESC, TotalXP DESC LIMIT 10;");
編輯3從scaisEdge 更新的代碼,但在每個人顯示爲1和XP的水平1,所以我改變了計數(*)改爲總和,按順序添加了TotalLevel,並且這似乎奏效了,但我無法讓它顯示用戶表中的用戶名(用戶列)?不知道我是否應該改變總和,因爲它不以另一種方式工作。
$sql = ("SELECT a.id, b.TotalXP, c.TotalLevel
FROM (SELECT DISTINCT id FROM factions_mcmmo_users) a
INNER JOIN (
SELECT user_id, Sum(taming)+Sum(mining)+Sum(woodcutting)+Sum(repair)+Sum(unarmed)+Sum(herbalism)+Sum(excavation)+Sum(archery)+Sum(swords)+Sum(axes)+Sum(acrobatics)+Sum(fishing)+Sum(alchemy) as TotalXP
FROM factions_mcmmo_experience
GROUP By user_id
) b on b.user_id = a.id
INNER JOIN (
SELECT user_id, Sum(taming)+Sum(mining)+Sum(woodcutting)+Sum(repair)+Sum(unarmed)+Sum(herbalism)+Sum(excavation)+Sum(archery)+Sum(swords)+Sum(axes)+Sum(acrobatics)+Sum(fishing)+Sum(alchemy) as TotalLevel
FROM factions_mcmmo_skills
GROUP by user_id
) c on c.user_id = a.id
ORDER BY TotalLevel DESC
LIMIT 10;");
EDIT 4 一切工作,但是當我嘗試使用「FORMAT格式化總數(總和(列),0)在內部連接時,EXP總似乎工作,但主要總級別不顯示超過1,000的結果,並且它打破了排行榜定位,它應該按照總級對它們進行排序,但它看起來是隨機的,當您刪除格式時,它會返回到工作狀態
我希望它顯示逗號,如果數數是幾千例如:總等級:5532和總EXP 5882,882
見現場演示:http://mcbuffalo.com/playground/leaderboards/server/factions-mcmmo.php
更新的代碼試圖利用格式:
$sql = ("SELECT a.id, a.user, b.TotalXP, c.TotalLevel
FROM (SELECT id, user FROM factions_mcmmo_users) a
INNER JOIN (
SELECT user_id, FORMAT(Sum(taming)+Sum(mining)+Sum(woodcutting)+Sum(repair)+Sum(unarmed)+Sum(herbalism)+Sum(excavation)+Sum(archery)+Sum(swords)+Sum(axes)+Sum(acrobatics)+Sum(fishing)+Sum(alchemy), 0) as TotalXP
FROM factions_mcmmo_experience
GROUP By user_id
) b on b.user_id = a.id
INNER JOIN (
SELECT user_id, FORMAT(Sum(taming)+Sum(mining)+Sum(woodcutting)+Sum(repair)+Sum(unarmed)+Sum(herbalism)+Sum(excavation)+Sum(archery)+Sum(swords)+Sum(axes)+Sum(acrobatics)+Sum(fishing)+Sum(alchemy), 0) as TotalLevel
FROM factions_mcmmo_skills
GROUP by user_id
) c on c.user_id = a.id
ORDER BY TotalLevel DESC;");
EDIT 5 用PHP更改號碼,一切正常
我得到的錯誤「SQLSTATE [42000]你可以使用幾個內部聯接:語法錯誤或訪問衝突:1064您有一個錯誤在你的SQL語法中;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的'FROM factions_mcmmo_users a INNER JOIN factions_mcmmo_experience b WHERE b.us'處使用正確的語法「 –
answer updated .. – scaisEdge
這似乎是計算表格?我似乎已經解決了它,並在頂端文章中修改了它,你能否告訴我是否有更好的方法來做到這一點,或者如果這種方式沒有問題的話, –