You are here: Re: mysql-question « PHP Programming Language « IT news, forums, messages
Re: mysql-question

Posted by Rik on 08/04/06 13:10

Michael Boutros wrote:
> ojorus wrote:
>> Hi!
>> My company make several flash-based games, and I use php to
>> communicate with mysql to provide highscore-lists.
>>
>> My problem is this:
>> When I save a player's score in the mysql-table, I want to find
>> which place the player got with his score (today). To get this I
>> have tried two different solutions, which both works, but are very
>> ineffective: (The Time-field is a DateTime type, and I have Score
>> and Time as Indexes)
>>
>> 1) SELECT COUNT(*) FROM table WHERE Score>=$score AND Time>CURDATE().
>> - or -
>> 2) SELECT Score FROM table WHERE Score>=$score AND Time>CURDATE().
>>
>> ... $place = mysql_num_rows($result)
>>
>> Both give the right result, but the problem is that when there are
>> many players playing at the same time, and the table consists of
>> several million records, the query is just too heavy for the
>> mysql-server, and it breakes down.
>>
>> So my question is: Are there any better ways of getting a player's
>> place?
>>
>> Ole Johan, Norway
>
> If I understand you correctly, you can use:
>
> SELECT score FROM table ORDER BY score DESC LIMIT 1
>
> I don't understand why you are using Time>CURDATE(), because it isn't
> needed in this situation.


That's not what the op wants.
To rephrase what I gather from his post:
He wants the placing of the score compared to other scores on that
particular day.

"SELECT COUNT(*) FROM table WHERE Score>=$score AND Time>CURDATE()"
Would be my choice, but seems to slow. Indexes are already created according
to the OP, so that's no way to go either. Maybe save only the day of the
score in the YYYYMMDD format, and use Time=CURDATE()+0.

About using COUNT(*):
"COUNT(*) is optimized to return very quickly if the SELECT retrieves from
one table, no other columns are retrieved, and there is no WHERE clause."

There is a WHERE clause here, hence the optimization is lost. So, maybe use
COUNT(score). I don't know wether this will be faster, but it's worth a
shot.

Grtz,
--
Rik Wasmus

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация