Автор: xDREDDx: Дата: 12.30.2010
Сегодня столкнулся с проблемой, отображения онлайна...
В SQL есть таблица sstatus, по плану в неё должен записываться текущий онлайн на сервере. В новой ревизии в файле char_athena.conf, нет настройки online_check (как было раньше). Может есть другой способ проверки онлайна?
Очень нужна помощь....^_^
Автор: xDREDDx: Дата: 12.30.2010
Спасибо, значит в новых ревизиях перенесли статус....
И ещё один вопрос, как бы правильно отредактировать php скрипт с этим SQL запросом...
$query = "SELECT user FROM $CONFIG_sql_dbname.sstatus ORDER by user asc limit 0,1";
$sql->result = $sql->execute_query($query,'header_bar.php',0);$sql->total_query++;
$row = $sql->fetch_row();
$total_online = $row["user"];
if (empty($total_online)) {
$total_online = '0';
Автор: unded: Дата: 12.30.2010
$query = "SELECT count(*) as user FROM {$CONFIG_sql_dbname}.char WHERE `online`='1' ";
$sql->result = $sql->execute_query($query,'header_bar.php',0);
$sql->total_query++;
$row = $sql->fetch_row();
$total_online = $row["user"];
if (empty($total_online)) {
$total_online = '0';
Автор: Cole McCormick: Дата: 12.30.2010
Видишь, без рус-еа долго протянуть невозможно, всеравно тянет назад. С наступающим тебя!
Автор: unded: Дата: 12.30.2010
Когда время есть, и делать нечего, просто захожу читаю темы =)
И тебя тоже с наступающим новым годом!
Автор: xDREDDx: Дата: 12.31.2010
По началу путало с онлайном на сайте, теперь заработало)
Спасибо) Очень помогли! Вас тоже с наступающим!))
Автор: Asuma: Дата: 12.31.2010
Цитата unded;28559:
$query = "SELECT count(*) as user FROM {$CONFIG_sql_dbname}.char WHERE `online`='1' ";
$sql->result = $sql->execute_query($query,'header_bar.php',0);
$sql->total_query++;
$row = $sql->fetch_row();
$total_online = $row["user"];
if (empty($total_online)) {
$total_online = '0';
Пробуй.
Автор: unded: Дата: 12.31.2010
Asuma ты не прав. Хоть ты напишешь count(*) или count(user) запрос будет обрабатываться ~0.03 - 0.04 сек. И запрос count(*) выполнится быстрее чем count(user) или count(0). И строки ты здесь не как не получишь так как вернется только одно значение user (псевдоним count(*)), а точнее количество найденных вхождений удовлетворяющее запросу.
Автор: Asuma: Дата: 01.01.2011
Цитата unded;28580:
Asuma ты не прав. Хоть ты напишешь count(*) или count(user) запрос будет обрабатываться ~0.03 - 0.04 сек. И запрос count(*) выполнится быстрее чем count(user) или count(0). И строки ты здесь не как не получишь так как вернется только одно значение user (псевдоним count(*)), а точнее количество найденных вхождений удовлетворяющее запросу.
$mysql->prepare('SELECT id FROM `char` WHERE online=:status');
$mysql->execute(array(':status' => 1));
print 'Кол-во игроков в сети:'.$mysql->num();
Автор: Cole McCormick: Дата: 01.01.2011
Цитата Asuma;28662:
Ты на пустую БД проверяешь?
Я ничего доказывать не буду, но мой совет: иди кури мануалы по MySQL :)
Если пользоваться моим классом, то весь код будет выглядить вот так:
$mysql->prepare('SELECT id FROM `char` WHERE online=:status');
$mysql->execute(array(':status' => 1));
print 'Кол-во игроков в сети:'.$mysql->num();
P.S. У меня все это выполняется за 0,0006sec.
Автор: Asuma: Дата: 01.01.2011
а, ок
Автор: unded: Дата: 01.01.2011
Да нет, база не пустая, там около 400 тыс. записей.
Можно использовать count() как альтернативу mysql_num_rows().
Но быстрее count(), т.к при запросе "SELECT id FROM `char` WHERE online=:status" Ты тупо получаешь поля по условию запроса, и потом отдаешь этот результат в php функцию (mysql_num_rows()) которая считает эти поля и возвращает количество, а так как язык php обрабатывается построчно, то есть с верху вниз, то это займет некоторое время, а при использовании Sql функции count() эти поля считаются еще на сервере MySql, и возвращает готовый результат, а точнее количество строк удовлетворяющие запросу Sql. По этому лучше использовать запрос с count().
p.c покажи свой класс.
p.c.c это тебе мануал читать нужно а не мне.
Автор: Asuma: Дата: 01.01.2011
Цитата unded;28681:
Да нет, база не пустая, там около 400 тыс. записей.
Можно использовать count() как альтернативу mysql_num_rows().
Но быстрее count(), т.к при запросе "SELECT id FROM `char` WHERE online=:status" Ты тупо получаешь поля по условию запроса, и потом отдаешь этот результат в php функцию (mysql_num_rows()) которая считает эти поля и возвращает количество, а так как язык php обрабатывается построчно, то есть с верху вниз, то это займет некоторое время, а при использовании Sql функции count() эти поля считаются еще на сервере MySql, и возвращает готовый результат, а точнее количество строк удовлетворяющие запросу Sql. По этому лучше использовать запрос с count().
p.c покажи свой класс.
p.c.c это тебе мануал читать нужно а не мне.
/**
* @author Asuma
* @license http://www.gnu.org/licenses/gpl.html GNU GPL 3.0
**/
class mysql extends PDO
{
public $count = 0;
private $statement = null, $host = 'localhost', $port = '3306', $user = 'root', $pass = '', $base = '', $charset = '';
public function __construct($host = 'localhost', $port = '3306', $user = 'root', $pass = '', $base = '', $charset = 'utf8')
{
$this->host = $host;
$this->port = $port;
$this->user = $user;
$this->pass = $pass;
$this->base = $base;
$this->charset = $charset;
return;
}
public function prepare($query)
{
if($this->count == 0)
{
parent::__construct('mysql:host='.$this->host.';port='.$this->port.';dbname='.$this->base, $this->user, $this->pass);
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
$this->statement = parent::prepare($query);
return;
}
public function execute($vars = null)
{
if($this->count++ == 0)
{
$this->query('SET NAMES '.$this->charset);
}
$this->statement->execute($vars);
return;
}
public function num()
{
if(isset($this->statement) && !empty($this->statement))
{
return $this->statement->rowCount();
}
return false;
}
public function fetch()
{
if(isset($this->statement) && !empty($this->statement))
{
return $this->statement->fetch();
}
return false;
}
}
Автор: unded: Дата: 01.01.2011
Я вижу ты не пробиваемый человек.
Я знаю что такое PDO, и активно им пользуюсь.
Я тебе говорю совсем другое, PDO это просто класс реализованный как расширение php.
А я тебе объясняю логику работы этих функций, и преимущества их в той или иной степени.
В принципе в этом классе твоего не чего нет, ты просто инкапсулировал класс PDO.
А в этой теме, человек просил сделать запрос на основе его кода, а не твоего псевдо класса.
Автор: unded: Дата: 01.01.2011
UPD: Мне вот интересно, ты вообще сам понимаешь что пишешь?
UPD2: + не нужна проверка empty.
UPD3: На вкус и цвет, товарищей нет.
UPD4: Девочка-скинхед, бритай под ноль, скажешь ей привет - в ответ услышишь ОЙ!
UPD5: Жду Aurizero CP!
Автор: Asuma: Дата: 01.01.2011
Цитата unded;28687:
Я вижу ты не пробиваемый человек.
Я знаю что такое PDO, и активно им пользуюсь.
Я тебе говорю совсем другое, PDO это просто класс реализованный как расширение php.
А я тебе объясняю логику работы этих функций, и преимущества их в той или иной степени.
В принципе в этом классе твоего не чего нет, ты просто инкапсулировал класс PDO.
А в этой теме, человек просил сделать запрос на основе его кода, а не твоего псевдо класса.
Автор: unded: Дата: 01.01.2011
АА ты самоучка. Ну тогда кому я объясняю что такое логика программирования,
Я понимаю ты посидел в интернете почитал мануалы книжки, и теперь считаешь себя богом.
Я ее очень давно писал, с тех времен много изменилось.
Автор: unded: Дата: 01.01.2011
А судя по тому как ты отвечаешь, и переходишь на ненормативную лексику, и по этим понтам "я вызываю тебя на поединок! Кто быстрее напишет код выводящий "я крутой программист" Я выйграл!" то тебе от силы лет 15 - 17.
А за оскорбление администрации форума и нарушения правила III.3 я тебя легко в рид-онли отправить могу.
Автор: Asuma: Дата: 01.01.2011
Цитата unded;28694:
А судя по тому как ты отвечаешь, и переходишь на ненормативную лексику, и по этим понтам "я вызываю тебя на поединок! Кто быстрее напишет код выводящий "я крутой программист" Я выйграл!" то тебе от силы лет 15 - 17.
А за оскорбление администрации форума и нарушения правила III.3 я тебя легко в рид-онли отправить могу.
Автор: DiS[IP]: Дата: 01.01.2011
[FONT=Lucida Console]Создайте во флуде тему с холиваром,тут вы занимаетесь сплошной хунтой.Да и тема вообще автором создана не в том разделе.Влезать в ваши споры не буду,но ИМХО undead в этой сфере более опытный и спорить с ним бесполезно.А сталин все верно сказал про eeRO.
Тему закрываю.Хотите посраться-создавайте тему во флуде.[/FONT]