Ich versuche, eine Rangliste zu erstellen, aber ich bin mir nicht sicher, wie die MySQL-Abfrage zu tun.Mehrere Punkte in MYSQL PHP Abfrage
Ich möchte alle Levels von einem Spieler in der Skill-Tabelle zählen und die Gesamtlevel und alle Erfahrungen von einem Spieler in der Erfahrungstabelle zählen und die Total Exp zusammen mit der Anzeige des Personennamens von den Benutzern erhalten Säule.
Es gibt 3 Tabellen factions_mcmmo_users, factions_mcmmo_experience, factions_mcmmo_skills.
Dies ist, was ich bisher, aber es funktioniert nicht:
$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;");
Jede Hilfe sehr geschätzt würde
EDIT: Ich habe es jetzt funktioniert, aber ich bin nicht sicher, ob Es ist der effizienteste Weg, Dinge zu tun. Wenn mir jemand helfen könnte, wenn es einen besseren Weg gäbe, würde das viel bedeuten.
Ich würde auch gerne wissen, ob es möglich ist, die Gesamt exp und Ebene mit Komma angezeigt werden, wenn die Zahl in den Tausenden zum Beispiel: Gesamthöhe 5882 und insgesamt xp 582.882
EDIT 2: I haben herausgefunden, wie die Zahlen zu formatieren, aber immer noch nicht wissen, ob mein Code
$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;");
EDIT 3 Aktualisiert Code von scaisEdge effizient, sondern wurde jedermanns Niveau 1 und XP Anzeigen als 1, also habe ich count (*) in sum geändert, eine Order By TotalLevel in absteigender Reihenfolge hinzugefügt und das scheint funktioniert zu haben, aber ich kann es nicht bekommen, um den Personennamen (Benutzerspalte) in der Benutzertabelle anzuzeigen? Ich bin mir nicht sicher, ob ich zur Summe wechseln sollte, weil es nicht anders ging.
$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 Alles funktioniert, aber wenn ich versuche, die Summen zu formatieren „Format (Sum (Spalten), 0) auf der inneren verbindet, erscheint die EXP Insgesamt zu arbeiten, aber Die Haupt-Gesamtstufe zeigt keine Ergebnisse an, die über 1.000 sind, und bricht die Ranglistenpositionierung ab. Sie sollte auf der gesamten Ebene sortiert werden, aber sie scheint zufällig zu sein. Wenn Sie das Format entfernen, wird 0 zurück
Ich möchte, dass es Kommas anzeigt, wenn der Zahl Nummer ist die Tausende zum Beispiel: Gesamt Level: 5532 und Total EXP 5882.882
Siehe Live-Demo: http://mcbuffalo.com/playground/leaderboards/server/factions-mcmmo.php
Aktualisiert-Code versucht Format zu verwenden:
$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 Geänderte Nummer mit PHP, alles funktioniert
ich den Fehler „SQLSTATE get [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler haben in Ihrer SQL-Syntax; Sie in die Bedienungsanleitung für die richtige Syntax zu Ihrer MySQL-Server-Version entspricht in der Nähe verwenden ‚FROM factions_mcmmo_users ein INNER JOIN factions_mcmmo_experience b auf WHERE b.us‘ at line 1" –
Antwort aktualisiert .. – scaisEdge
Das schien die gesamten Reihen zu zählen in der Tisch? ich habe es schien ausgearbeitet und haben es mit einer Bearbeitung in der oberen Pfosten befestigt ist, könnten Sie mir sagen, ob es einen besseren Weg, es zu tun, oder wenn auf diese Weise in Ordnung ist. –