Avatar billede spidr Nybegynder
08. august 2005 - 20:57 Der er 13 kommentarer og
1 løsning

Hente fra en tabel og sortere efter en anden

ok, helt "enkelt" er det jeg skal, men ikke kan finde ud af, er at sortere et udtræk fra en tabel efter hvor god en karakter "udtrækket" har fået i en anden tabel.

Jeg har en tabel med pigerne, som bliver kaldt Kodet, og så har jeg en tabel med ip'erne der stemmer på pigerne, kaldt Kodetip, hver gang man stemmer på en piger, bliver ens ip, den karakter men gav pigen, og id'en på den pige man stemte på gemt i Kodetip.. Så det der skal ske er at den skal finde alle tråde i tabellen Kodetip med samme "idet" og så ligge dem sammen og dividere med hvor mange den har fudet.

Det vil sige hvis den finder 5 indlæg hvor idet er 3 og hvor alle 5 vote er 4, så skal den skrive ud at ID 4 har (4+4+4+4+4)/5 i karakter

og derfor skal sorteres over dem dem er har under 4....

mine tabeller:
CREATE TABLE Kodetip (
  id int(11) NOT NULL auto_increment,
  ip varchar(255) NOT NULL,
  idet int(9) NOT NULL,
  vote int(2) NOT NULL,
  PRIMARY KEY  (id)
);


CREATE TABLE Kodet (
  id int(9) NOT NULL auto_increment,
  Navn varchar(50) NOT NULL,
  Placering int(4) NOT NULL,
  Stemmer int(9) NOT NULL,
  MSN varchar(250) NOT NULL,
  Tekst longtext NOT NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;

jeg bruger lige nu denne her til at udskrive kodet:

$query = mysql_query("select * from Kodet order by $sort desc limit $i,$delt") or die(mysql_error());

while($row = mysql_fetch_array($query)){

echo "<a href=\"showkod.php?mas=$row[id]\"><img src=\"kod/$row[id].jpg\" border=0 width=350></a><br><br>";
}

den skal jo så bare sorteres efter deres karakter. Håber jeg har gjort det klart nok, har selv prøvet lidt med sql join, men kan ikke helt få det til at virke.
Avatar billede spidr Nybegynder
09. august 2005 - 10:20 #1
Er der virkelig ingen der kan / vil hjælpe mig? Jeg er virkelig lost, og skal virkelig bruge det for at få www.baronerne.com til at køre ordentligt.
Avatar billede kjulius Novice
10. august 2005 - 00:13 #2
Skal du så ikke bare ændre din $query variabel til noget lignende dette?:

$query = mysql_query("select Kodet.Navn, SUM(IFNULL(Kodetip.vote, 0)) / COUNT(*) AS Gennemsnit from Kodet LEFT JOIN Kodetip ON Kodet.id=Kodetip.idet GROUP BY Kodet.Navn order by SUM(IFNULL(Kodetip.vote, 0)) / COUNT(*) desc limit $i,$delt") or die(mysql_error());
Avatar billede spidr Nybegynder
10. august 2005 - 07:32 #3
lyder næsten for nemt, prøver right away ;)
Avatar billede spidr Nybegynder
10. august 2005 - 07:34 #4
Så skriver den bare; Invalid use of group function

:(
Avatar billede kjulius Novice
10. august 2005 - 22:59 #5
Hmm, det forstår jeg ikke rigtigt. For mig ser det rigtigt ud. Har du lavet direkte cut and paste?

Ikke, at jeg påstår min sql er helt rigtig, men den fejlmelding forstår jeg ikke.
Avatar billede kjulius Novice
10. august 2005 - 23:19 #6
Hvis du har medtaget flere felter, som ikke er en del af aggregat funktioner (funktioner, som bruges ifbm. GROUP BY, som f.eks. MIN, MAX, SUM, COUNT mv.), har du forhåbentlig husket at tilføje disse i din GROUP BY også. Hvis man bruger aggregat funktioner, skal alle andre felter du har medtaget i din SELECT sætning også angives i GROUP BY, ellers fremkommer den fejlmelding du refererer til.
Avatar billede spidr Nybegynder
11. august 2005 - 14:58 #7
Jeg er set ikke med, nu røg det lige op på et nivou hvor jeg syntes det er lidt uoverskueligt :S

men bruger jo også id i:

$query = mysql_query("select * from Kodet order by $sort desc limit $i,$delt") or die(mysql_error());

while($row = mysql_fetch_array($query)){

echo "<a href=\"showkod.php?mas=$row[id]\"><img src=\"kod/$row[id].jpg\" border=0 width=350></a><br><br>";
}
Avatar billede kjulius Novice
11. august 2005 - 17:05 #8
Okay! Ja, jeg havde ikke været opmærksom på, at det var id, du brugte. Men du kan godt medtage flere felter en Navn, bare du så også husker at placere dem i GROUP BY også. F.eks. hvis du både vil have Kodet.Id og Kodet.Navn med:

$query = mysql_query("select Kodet.Id, Kodet.Navn, SUM(IFNULL(Kodetip.vote, 0)) / COUNT(*) AS Gennemsnit from Kodet LEFT JOIN Kodetip ON Kodet.id=Kodetip.idet GROUP BY Kodet.Id, Kodet.Navn order by SUM(IFNULL(Kodetip.vote, 0)) / COUNT(*) desc limit $i,$delt") or die(mysql_error());
Avatar billede spidr Nybegynder
11. august 2005 - 17:13 #9
Dens iger stadig:

Invalid use of group function

Har også prøvet at lave om så der ikke står Kodet.Id men Kodet.id, men det hjalp heller ikke, tænkte det måske betød noget når det jo står med småt i tabelen.

Ellers nogen ideer?
Avatar billede kjulius Novice
11. august 2005 - 17:16 #10
Hov, jeg ser nu, at du snakker om feltet ip som der hvor karakteren gives, hvor jeg har summeret på feltet vote. Hvad er det rigtige? Vote er numerisk, og egner sig dermed til beregninger, mens ip er et variabelt char felt, som ikke egner sig til beregninger.
Avatar billede spidr Nybegynder
11. august 2005 - 17:22 #11
nej nej, ip skal slet ikke bruges til det her.

Det er i feltet vote hvor karakterene står, og det er rigtigt nok at det er der fra at karakteren skal sumeres.
Avatar billede kjulius Novice
11. august 2005 - 17:37 #12
Nu har jeg prøvet at oprette dine tabeller, og kørt min sql i PhpMyAdmin, og den gav rigtigt nok den fejl du angav. Det hjalp gevaldigt, da jeg rettede værdien i ORDER BY til simpelthen Gennemsnit:

$query = mysql_query("select Kodet.Id, Kodet.Navn, SUM(IFNULL(Kodetip.vote, 0)) / COUNT(*) AS Gennemsnit from Kodet LEFT JOIN Kodetip ON Kodet.id=Kodetip.idet GROUP BY Kodet.Id, Kodet.Navn order by Gennemsnit desc limit $i,$delt") or die(mysql_error());

Jeg håber det også virker hos dig...
Avatar billede spidr Nybegynder
11. august 2005 - 19:26 #13
Der ser sørme ud som om det virkede :D Tusind tak :)
Avatar billede kjulius Novice
11. august 2005 - 20:20 #14
Ingen årsag :-)
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
Computerworld tilbyder specialiserede kurser i database-management

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