Avatar billede homsabu Nybegynder
29. december 2002 - 18:53 Der er 17 kommentarer og
1 løsning

Hente data på en speciel måde

Jeg skal bruge et lidt specielt script! ;-)
jeg har en database der ser næsten sådan ud;

---ID------URL-------HITS------
-------------------------------
--- 1-------A.com----  32------
--- 2-------B.dk-----  45------
--- 3-------C.dk-----  48------
..... osv osv
---28-------T.com----  24------
--------------------------------
(der vil løbende komme nye URL's til med et højere ID)


Jeg skal så bruge en eller flere funktioner som ta'r de 10 URL's med højest ID og så skal den sortere de 3 URL's ud af de 10 ud som har de højeste antal hits!
Avatar billede Noone Nybegynder
29. december 2002 - 18:59 #1
SELECT * FROM tabel ORDER BY hits DESC LIMIT 3;

Kan den bruges?
Avatar billede arne_v Ekspert
29. december 2002 - 19:00 #2
Lav det i din applikation og ikke i din database.

Den slags er normalt meget nemmere at lave i VB, C++, Java, ASP
eller hvad du nu bruger end i SQL !
Avatar billede homsabu Nybegynder
29. december 2002 - 19:28 #3
chanoa: nej... det du har lavet er bare at den ta'r de 3 højeste hits.... og ikke som jeg har beskrevet!
arne_v: scriptet skal være i php....
Avatar billede arne_v Ekspert
29. december 2002 - 19:30 #4
Så lad PHP sende SQL som:

SELECT * FROM tabel ORDER BY ID DESC

og så læser den kun 10 records og bruger de 3 med højeste antal hits.

Jeg er sikker på at PHP kan gøre det !
Avatar billede homsabu Nybegynder
29. december 2002 - 20:19 #5
arne_v: dit "script" gør heller ikke det jeg vil ha'.... den sortere jo bare alle resultater mht. id-størrelse.... den vægter overhovedet ikke hits på nogen måde!
Avatar billede arne_v Ekspert
29. december 2002 - 20:28 #6
Korrekt. Men det synes jeg at du skal lade dit PHP script
tage sig af.
Avatar billede svoeber Nybegynder
29. december 2002 - 20:29 #7
Brug:
SELECT * FROM tabel ORDER BY hits DESC LIMIT 10
og når du skal til at hive data ud i PHP laver du først en:
mysql_data_seek($sql_resultat, 3);
Avatar billede homsabu Nybegynder
29. december 2002 - 20:46 #8
svoeber: kan jeg få dig til at skrive et komplet script?!?! for jeg er ikke så stærk i php! + at lave det som et svar... så får du point'ene! ;-)
Avatar billede svoeber Nybegynder
29. december 2002 - 20:52 #9
$sql = "SELECT * FROM tabel ORDER BY HITS DESC LIMIT 10";
$res = mysql_query($sql) or die (mysql_error());
mysql_data_seek($res, 3);
while ($data = mysql_fetch_array($res)) {
  echo $data[URL];
  echo " (".$data[HITS]." hits)<br>";
}

Du kan selv ændre output (i while-sætningen). Jeg antager at din tabel hedder "tabel", men du kan selv ændre det til det korrekte navn.

Jeg har ikke afprøvet dette script, men jeg kan ikke lige se nogen fejl.
Avatar billede homsabu Nybegynder
29. december 2002 - 21:00 #10
så vidt jeg kan se gør scriptet ikke det rigtige...
Den skal sortere på 2 forskellige værdier;
FØRST skal den ta' de 10 med højeste ID....
DEREFTER skal den sortere de 10 den fik før efter hvor mange HITS de har og kun ta' de 3 med størst værdi!

(så vidt jeg kan se ta'r svoeber's script først og plukker 10 ud efter størrelsen af HITS... og derefter plukker den bare 3 tilfældige ud af de 10)
Avatar billede svoeber Nybegynder
29. december 2002 - 21:06 #11
Ja, nu ser jeg, at jeg misforstod spørgsmålet :)

Er det, du vil have:
1) hente de 10 nyeste URLs (dvs. højeste ID)
2) Trække de 3 URLs ud, som har flest hits

eller er det:
1) hente de 10 nyeste URLs (dvs. højeste ID)
2) Trække disse URLs ud undtagen de 3 med flest hits

??
Avatar billede homsabu Nybegynder
29. december 2002 - 21:07 #12
den første; -->

Er det, du vil have:
1) hente de 10 nyeste URLs (dvs. højeste ID)
2) Trække de 3 URLs ud, som har flest hits
Avatar billede Noone Nybegynder
29. december 2002 - 21:41 #13
HMm...

SELECT * FROM tabel ORDER BY id, hits DESC LIMIT 3;

Skulle vælge 3 records, først sorteret faldende efter id, derefter hits...
Avatar billede homsabu Nybegynder
29. december 2002 - 22:03 #14
chanoa: nej... det gør heller ikke det jeg vil ha'... med de data jeg har i tabellen vil din funktion kun sortere efter id... (HVIS nogle har det samme id SÅ sortere den efter hits... men alle mine rækker har jo eget id)
Avatar billede Noone Nybegynder
30. december 2002 - 01:43 #15
Hmmm....

SELECT * FROM tabel ORDER BY id DESC LIMIT 10

Det vil give dig de 10 nyeste. Så kan du filtrer dem i whatever programmeringssprog du bruger.
Avatar billede homsabu Nybegynder
30. december 2002 - 09:10 #16
chanoa: du sux til at hjælpe! ;-)... det der kan jeg sagtens finde ud af - det er det sidste med at sortere de 3 højeste hits ud der er svært!
Avatar billede arne_v Ekspert
30. december 2002 - 09:37 #17
SOm jeg skrev XX kommentarer tilbage, så mener jeg at det skal gøres
i scriptet (altså i PHP).
Avatar billede svoeber Nybegynder
30. december 2002 - 14:26 #18
Hvis man kunne gøre det i SQL, skulle man bruge en reference til den 10. nyeste række i tabellen - så kunne man gøre noget lignende:
"SELECT * FROM tabel WHERE id >= [10. nyeste id] ORDER BY hits DESC"

....men jeg kan ikke finde et eksempel, hvor dette er muligt.

I PHP kan du gøre flg.:
$sql = "SELECT * FROM tabel ORDER BY id DESC LIMIT 10";
$res = mysql_query($sql) or die (mysql_error());
while ($rows[] = mysql_fetch_assoc($res)) {}
foreach ($rows as $val) {
      $sortarray[] = $val['HITS'];
}

// Her sorteres listen efter HITS
array_multisort($sortarray, SORT_DESC,$rows);

// Tager de 3 første ud
$rows = array_slice ($rows, 0, 3);

// Printer array
foreach ($rows as $data) {
  echo $data[URL];
  echo " (".$data[HITS]." hits)<br>";
}
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