Jeg en pakkeleg, hvor at der er en liste hvor man kan se alle spillerne, den der har flest pakker står øvest.
Sådan som jeg har lavet det, har jeg en tabel for hver bruger som er med i pakkelegen, er række som angiver hvor mange pakker personen har i tal.
Det virker også meget fint, men nogle ganger kommer der et problem. På den side hvor man tager pakken er der en kode som lægger 1 til i tabellen for en selv, og en til kode som trækker 1 fra hos den man tog pakken fra. Men nogle gange undlader den at trække 1 tal fra, så dem der ikke har nogle pakker, kommer højt op på listen, mellem dem som har.
Jeg vil så gerne lave det sådan, at når mysql koden skal hente antallet af pakker og lave listen, at så istedet for den går ind og henter tallet, så tager den alle pakkerne (som er i en mysql tabel for sig selv), finder ud af hvem der har dem, og så lægger dem sammen, hvor den tilsidt kommer med en værdi som kan sættes ind i ORDER BY, så tabellen skal sorteres.
Her er den kode som jeg bruger til at lave listen med: $query1 = mysql_query("SELECT * FROM pakkeleg ORDER BY antal_pakker DESC") or die(mysql_error()); while($vis_liste = mysql_fetch_array($query1)) {
Og her er koden som trækker tallene fra og til og pakken bliver taget (den som jeg helst vil være fri for):
Men det er en liste over dem der har pakker, hvor dem der har flest er øver, som her: Første bruger - 2 pakker Anden bruger - 2 pakker Fjerde bruger - 1 pakke Femte bruger - 0 pakker
$query1 = mysql_query("SELECT * FROM pakkeleg ORDER BY antal_pakker DESC") or die(mysql_error()); while($vis_liste = mysql_fetch_array($query1)) {
Hvor at antal_pakker sortere dem.
Ved den første bruger står der selvfølgelig 2 i dens person række i tabellen for antal_pakker...
Den metode virker også...
Men mit problem er at nogle gange når man tager en pakke fra en anden, så skal antal_pakker jo rettes til hvor mange man har, men det gør den ikke. Og så kommer dem der ikke har nogle pakker til at stå øverst. og det skal de ikke.
Pakkerne har sin egen tabel der hedder: `pakkeleg_pakker` ( `id` int(8) NOT NULL auto_increment, `ejer_af_pakken` varchar(255) NOT NULL default '', `pakke_type` varchar(255) NOT NULL default '', `navn` varchar(255) NOT NULL default '', `info` longtext NOT NULL, PRIMARY KEY (`id`) )
Og jeg vil gerne have at det er sådan, at når listen over brugerne med pakkerne skal laves, at så går den ind i pakkeleg_pakker, og så på en eller anden måde laver den listen ud fra den, stadig så dem der har flest pakker står øverst...
Hvis det ikke er muligt vil jeg gerne have en løsning på mit problem, så at den hver gang opdatere ens antal_pakker.
SELECT *, COUNT(id) AS pakkeAntal FROM `pakkeleg_pakker` LEFT JOIN dinBrugerTabel ON pakkeleg_pakker.ejer_af_pakken=dinBrugerTabel.brugerId GROUP BY pakkeleg_pakker.ejer_af_pakken
du skal så bare lige ændre bruger tabellen den der lister alle de pakker der er delt ud og hvem de er delt ud til hvis du vil liste alle brugerne og hvor mange pakker de har skal du bare vende den om
SELECT *, COUNT(pakkeleg_pakker.id) AS pakkeAntal FROM `pakkeleg_pakker` LEFT JOIN pakkeleg ON pakkeleg_pakker.ejer_af_pakken=pakkeleg.id GROUP BY pakkeleg_pakker.ejer_af_pakken
prøv lige om det er det her du vil have eller om du vil liste alle brugere og hvor mange pakker de har
noget i stil med SELECT *, COUNT(pakkeleg_pakker.id) AS pakkeAntal FROM pakkeleg LEFT JOIN pakkeleg_pakker ON pakkeleg_pakker.ejer_af_pakken=pakkeleg.id GROUP BY pakkeleg_pakker.ejer_af_pakken ORDER BY pakkeAntal DESC
så burede den også returnere alle brugerne og hvor mange pakker de har ellers forstår jeg ikke dit tabel setup, prøv at smide koden du fortager udtrækket med
<? $query1 = mysql_query("SELECT *, COUNT(pakkeleg_pakker.id) AS pakkeAntal FROM pakkeleg LEFT JOIN pakkeleg_pakker ON pakkeleg_pakker.ejer_af_pakken=pakkeleg.id GROUP BY pakkeleg_pakker.ejer_af_pakken ORDER BY pakkeAntal DESC") or die(mysql_error()); while($vis_liste = mysql_fetch_array($query1)) { ?>
og du udskriver $vis_liste['pakkeAntal'] og $vis_liste['brugernavn']
hvis du har brugerens id (pakkeleg.id) stående i pakkens ejer id (pakkeleg_pakker.ejer_af_pakken) burde den gerne returnere alle brugerne
men prøv at køre dette og se hvad den udskriver <? $query1 = mysql_query("SELECT * FROM pakkeleg LEFT JOIN pakkeleg_pakker ON pakkeleg_pakker.ejer_af_pakken=pakkeleg.id ORDER BY pakkeAntal DESC") or die(mysql_error()); while($vis_liste = mysql_fetch_array($query1)) { print_r($vis_liste); } ?>
Nej i pakkeleg der er id'et i brugernavn. Men nu har jeg sat den ind så den udskriver listen. Men kan den ikke også gøre sådan at den også udskriver den der ikke har nogen, evt. i en ny while lige neden under?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.