Jump to content
php.lv forumi

Vieta pēc kārtas


Roberts Zariņš

Recommended Posts

Sveicināti. Netieku galā ar vienu kvēriju; novērtētu, ja varētu sniegt kādus padomus :).

Table #1

id points

1 0.53

2 9.18

3 -90.11

4 -2.4

5 6.77

6 8.13

... ...

Zinot id, vajag atgriezt, kurš pēc kārtas tas ir. Līdzīgi kā komandu tops pēc punktu skaita. Un, zinot komandu, jāatgriež, kurā vietā pašreiz komanda atrodas. Tas būtu iespējams ar vienu kvēriju? Ar PHP atrast vietu pēc kārtas būtu baigais resursu overkils, jo tabula pati par sevi ir ļoti liela (20,000 ierakstu).

 

Paldies.

Edited by Roberts Zariņš
Link to comment
Share on other sites

Neesmu drošs, bet man šķiet, ka (SELECT points FROM sometable WHERE id=4) izpildās pie katras rindas

Es rakstītu šādi

SELECT COUNT(*)+1 `count` FROM tabula t1
INNER JOIN tabula t2 on t2.points < t1.points
WHERE t1.id = 4;

Un ja vēl šis pieprasījums notiek samērā bieži ir vērts uzlikt indeksu uz points kololonas

Edited by draugz
Link to comment
Share on other sites

Subkverijs tiek izpildīts katru reizi, ja viņš ir atkarīgs no pamatkverija datiem.

Šijā gadījumā viņš nav un mysql optimizātors viņu izpilda vienu reizi sākumā.

Indeks uz point kolonnas ir viennozīmīgi nepieciešams.

 

Reālā gadījumā mums drošvien vajadzēs arī datus par attiecīgo id, tāpēc kveriju var pārrakstīti vienkārši šādi:

SELECT *,(SELECT count(*) FROM table WHERE points<t1.points)+1 rank FROM table t1 WHERE id=4

Link to comment
Share on other sites

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...