Avatar billede kicker Nybegynder
10. december 2007 - 23:19 Der er 18 kommentarer

Sorter efter antal

Hejsa.

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):

$nytpakkemig = $vis[antal_pakker]+1;
$nytpakkedig = $vis_dig[antal_pakker]-1;

mysql_query("UPDATE pakkeleg SET antal_pakker = '$nytpakkemig' WHERE brugernavn = '$_SESSION[bruger_id]'") or die(mysql_error());

mysql_query("UPDATE pakkeleg SET antal_pakker = '$nytpakkedig' WHERE brugernavn = '$_GET[id_user]'") or die(mysql_error());
Avatar billede dmdisco Nybegynder
11. december 2007 - 10:19 #1
jeg er ikke helt sikker på hvad du gerne vil have men kig lidt på en af join metoderne kan være det er det du leder efter
Avatar billede dmdisco Nybegynder
11. december 2007 - 10:22 #2
Avatar billede kicker Nybegynder
11. december 2007 - 14:17 #3
Tror ikke det er noget jeg kan bruge...

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

osv...

Lige nu så nå listen skal laves,
Avatar billede kicker Nybegynder
11. december 2007 - 14:25 #4
- bruger jeg denne kode:

$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.
Avatar billede dmdisco Nybegynder
11. december 2007 - 14:39 #5
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

noget i den stil så?
Avatar billede dmdisco Nybegynder
11. december 2007 - 14:40 #6
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
Avatar billede kicker Nybegynder
11. december 2007 - 15:05 #7
Så får jeg beskeden:

Column 'id' in field list is ambiguous

Tabellen for brugerne er:

pakkeleg
id int(8)
brugernavn varchar(255)
ip varchar(255)
slag varchar(255)
antal_pakker int(10)
Avatar billede dmdisco Nybegynder
11. december 2007 - 15:37 #8
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
Avatar billede dmdisco Nybegynder
11. december 2007 - 15:38 #9
jeg går ud fra at ejer_af_pakken indeholder id'et på en bruger i tabellen pakkeleg
Avatar billede kicker Nybegynder
11. december 2007 - 15:57 #10
Det er med en liste over alle brugerne og hvor mange de har.

Med den anden kode kommer der ingen fejlbesked, men ved ikke helt hvad for nogle der skal byttes om på?
Avatar billede dmdisco Nybegynder
11. december 2007 - 16:09 #11
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
Avatar billede kicker Nybegynder
11. december 2007 - 16:33 #12
Så er det kun den første i brugertabelen som den skriver
Avatar billede dmdisco Nybegynder
12. december 2007 - 10:14 #13
er pakkeleg din bruger tabel?
Avatar billede kicker Nybegynder
12. december 2007 - 11:49 #14
Ja
Avatar billede dmdisco Nybegynder
12. december 2007 - 11:57 #15
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
Avatar billede kicker Nybegynder
12. december 2007 - 12:09 #16
<?
$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)) {
?>
Avatar billede dmdisco Nybegynder
12. december 2007 - 12:20 #17
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);
}
?>
Avatar billede kicker Nybegynder
12. december 2007 - 12:30 #18
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?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester