03. marts 2003 - 17:09Der er
11 kommentarer og 2 løsninger
Sortering
Hej
Jeg skal have sorteret, så den sortere på hvor mange der er i mellem fx. 6 og 11 (der er jo 5), og der hvor der er færrest i mellem skal stå øverst og så skal de komme derned ad.
Her er et eksempel på hvordan tal'ne kan se ud, jeg hiver dem ud af den db hvor de ligger i hvert sit felt (dog hører 6 og 11 sammen, ligesom 4 og 8, og 4 og 10 også hører sammen).
Før sortering: 6 og 11 4 og 8 4 og 10
Efter sortering skal de komme til at stå sådan: 4 og 8 6 og 11 4 og 10
Efter ti år i London, Madrid, Paris og Utrecht kommer Sabios AI-fokuserede program af arrangementer om kundeoplevelser, ‘Disrupt’, for første gang til Danmark.
Det ser ud til at du har fat i noget af det rigtige. Det er godt nok den modsatte vej den sortere - men den sortere da (den starter med 4-10, så 6-11 og 4-8) - MEN jeg skal have den ind i en mysql_query(SELECT bla bla FROM blabla ORDER BY [det her array] - er det muligt?
modsat vej kan du få ved at ændre : return ($d_a > $d_b) ? -1 : 1; til return ($d_a < $d_b) ? -1 : 1;
jeg forstår ikke helt dit mysql-select. du kan jo trække dine data ud fra db uden noget ORDER BY ... og så bare køre dit array igennem ovenstående funktion.
Hmm... oki, grunden til at jeg ville lave det som en ORDER BY, var fordi den samttidig skal trække en masse flere data med ud, som jeg skal bruge - men det burde den jo kunne gøre alligevel..
Men hvordan skal det så skrives - har testet lidt, men får bare 0 ud. Hvor skal: function cmp ($a, $b) { $d_a = $a[0]-$a[1]; if ($d_a<0) $d_a=$d_a*-1; $d_b = $b[0]-$b[1]; if ($d_b<0) $d_b=$d_b*-1;
Det kan vist gøres lidt pænere i ren SQL - i en linie faktisk:
Her et eksempel fra SQL2000:
create table voting.dbo.test (a int, b int, c VARCHAR(10))
INSERT INTO voting.dbo.test VALUES (1,10,'æbler') INSERT INTO voting.dbo.test VALUES (5,2,'pærer') INSERT INTO voting.dbo.test VALUES (6,5,'gulerødder')
SELECT * FROM voting.dbo.test ORDER BY ABS(a-b)
Bemærk ABS(a-b) der giver forskellen som positivt heltal. Du kan evt. fjerne ABS() hvis ikke det er det du ønsker.
swaxi > jpvj's løsning fylder i hvertfald noget mindre, så jeg har valgt at bruge den. Men jeg synes også du skal have noget for dit arbejde, så jeg vil give jer 30 point hver (håber i synes det er en ok fordeling?).
Helt fint med mig :-) En argument for at lave det direkte i SQL er, at DBMS (DataBase Management Systemet) selv optimerer kaldet. Desuden er fortoklet PHP kode ikke særligt hurtigt. Derfor mit forslag.
JP
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.