Hi,
Im looking to combine 6 database fields, sort them descending and then result which one is first, second third etc and eventually save them in 6 other fields. I am trying but its not working. I dont know how to result them.
let player = $w("#name").text;
wixData.query("POINTS")
.descending("points1", "points2", "points3", "points4", "points5", "newPoints")
.eq("title", player)
.find()
.then( (results) => {
let items = results.items[0];
console.log("Player ID Found")
let firstItem = items[1];
let secondItem = items[2];
let thirdItem = items[3];
let fourthItem = items[4];
let fifthItem = items[5];
player.points1 = firstItem;
player.points2 = secondItem;
player.points3 = thirdItem;
player.points4 = fourthItem;
player.points5 = fifthItem;
wixData.save("POINTS", items)
console.log("Largest Points Saved")
} )
Maybe i have to combine ?
let total_points = 0;
for (let i = 0; i < 5; i++) {
????????
}
I hope i explained clearly what i am seeking.
Thanks!
@Ahmad
I misunderstood what you want, I thought that a given player might have multiple entries in the database, in this case, you can ignore the first loop.
wixData.query('POINTS').eq('player','Ahmad').find().then((result) => { const player = result.items[0] || null; if (player) { const points = []; for (let i = 1; i <=6; i++) { points.push(player[`points${i}`]); } points.sort((a, b) => { return b - a; }) const final_points = points.slice(0, 5); } })
Now you have the highest 5 points out of 6 for the player "Ahmad" stored in an array and sorted descendingly, how you save them is completely up to you.
Ok i think i have managed to do what i need. But im having issues saving the data. @Ahmad could you take a look where is mistake here? And maybe i did in a very complicated way and there is a easier/shorter way to do it?
But it works :) Console shows correct results.
let newestpoints = $w("#newpoints").value; $w('#dataset2').onReady(() => { console.log("Finding TOP5 points...") wixData.query('POINTS-PERSONAL') .eq('title', player) .find() .then((result) => { const entries = result.items[0]; // Loop through all the items to find the highest ones let playerpoints = entries let points = []; points.push(playerpoints.points1, playerpoints.points2, playerpoints.points3, playerpoints.points4, playerpoints.points5, Number(newestpoints)); // Sort points as descending order points.sort(function (a, b) { return b - a; }) let points11 = 0; for (let i = 0; i < 1; i++) { points11 += points[i]; } let points22 = 0; for (let i = 1; i < 2; i++) { points22 += points[i]; } let points33 = 0; for (let i = 2; i < 3; i++) { points33 += points[i]; } let points44 = 0; for (let i = 3; i < 4; i++) { points44 += points[i]; } let points55 = 0; for (let i = 4; i < 5; i++) { points55 += points[i]; } // Get only the highest 5 points; console.log ("Points 1 is:", points11) console.log ("Points 2 is:", points22) console.log ("Points 3 is:", points33) console.log ("Points 4 is:", points44) console.log ("Points 5 is:", points55) let toInsert = { "points1": points11, "points2": points22, "points3": points33, "points4": points44, "points5": points55 }; wixData.save("POINTS-PERSONAL", toInsert ) }) .then((item) => {
Hi @Ahmad
This code is actually to count all items. But i need to find one persons 6 points and return only 5 highest points. Then save them to separate fields starting points1 as highest ending points5 as lowest.
Points6 field i am using for "New point entires" only
Thanks!
Hi Mantas,
If you got it right, you want to retrieve the highest points of all player entries, while keeping in mind that each entry has 6 points.
If that's the case, then ...
// A constant to store the points; const points = []; wixData.query('POINTS').eq('player', 'Ahmad').limit(1000).find().then((result) => { const entries = result.items; // Loop through all the items to find the highest ones entries.forEach(entry => { // Loop through the points of each entry for (let i = 1; i <=5; i++) { // Add the point to the points array points.push(entry[`points${i}`]); } }); /* Now that we have each and every single point of that player we just need to sort the array, then get the highest 5 points */ entries.sort((a, b) => { return b - a; }); // Get only the highest 5 points; const pointsNum = 5; // Number of points to get. const highest_points = points.slice(0, pointsNum); })
Once you have the highest points of all entries, you can do whatever you want with them, display, store, or just print them to the console, simple, isn't it?
Hope this helps~!
Ahmad