скажите по каким образом можно через базу определить гм юзверь или нет и я напишу скрипт в 4-6 строк делающий мизерную нагрузку. У вас (кроме алекснепро, у него ещё вполне съедобное решение) все решения делают по куче достаточно больших запросов в базу, когда наверняка можно сделать один проооостенький и маааленький запрос =\ ещё раз Как по базе определить гм пользователь или нет?
Определить ГМ юзер или нет просто SELECT * FROM auth WHERE userid=тут_айди_юзера Но только не пойму зачем тебе это? Я уже написал ранее как получить айди всех ГМов (ничего лишнего) одним запросом, потом в цикле вытягиваются данные об этом айди ГМа (ник или логин или что угодно) и проверяется онлайн он или нет если нужно. Итого 1 запрос на получение кол-ва, и по 2 запроса на каждого найденного ГМа (если без статуса онлайн то по 1-му)
Могу сделать одним единственным запросом в базу с LEFT JOIN, нужен примерный вид базы, можешь сделать? Поставим вопрос по другому, как сервер определяет гм юзверь или нет по базе? впрочем не особо надо, гораздо лучше скинуть бэкап для mysql
Ну если тебе важно именно одним запросом, то держи SELECT DISTINCT userid, point.zoneid, users.name FROM `auth` LEFT JOIN point ON auth.userid=point.uid LEFT JOIN users ON auth.userid=users.id Тут одним запросом получаем айди, онлайн/оффлайн и логин аккаунта всех ГМов. Вместо users.name можно подставить любое другое поле из таблицы users, чтобы выводить не аккаунт, а ник.
В таблице auth записывается айди ГМа и список прав, на каждое право ГМа одна запись, обычно по 22 записи для одного айди.
代码: <?php // script by Botchal $dbhost="127.0.0.1";$dbuser="botchal";$dbpass="12345";$dbname="pw";// настройте подключение к базе $dbtype="1";// если 1 то MySQL, если 2 то MSSQL if($dbtype=="1"){ $db=mysql_connect($dbhost,$dbuser,$dbpass);$db=mysql_select_db($dbname,$db); $result1=mysql_query("select ID,name from users"); while($row1=mysql_fetch_array($result1)){ $id_user=$row1['ID']; $name_user=$row1['name']; $result2=mysql_query("select * from forbid where userid='$id_user'");$gm=mysql_num_rows($result2); if($gm!="0"){ $result3=mysql_query("select * from point where uid='$id_user'");$online=mysql_num_rows($result3); if($online!="0"){ echo"<font color='green'>GameMaster - ".$name_user." сейчас в игре</font><br>";// строчка с именем ГМа если он в сете, для диза правте её }else{ echo"<font color='red'>GameMaster - ".$name_user." сейчас не в игре</font><br>";// строчка с именем ГМа если он НЕ в сете, для диза правте её }}else{}}} if($dbtype=="2"){ $db=mssql_connect($dbhost,$dbuser,$dbpass);$db=mssql_select_db($dbname,$db); $result1=mssql_query("select ID,name from users"); while($row1=mssql_fetch_array($result1)){ $id_user=$row1['ID']; $name_user=$row1['name']; $result2=mssql_query("select * from forbid where userid='$id_user'");$gm=mssql_num_rows($result2); if($gm!="0"){ $result3=mssql_query("select * from point where uid='$id_user'");$online=mssql_num_rows($result3); if($online!="0"){ echo"<font color='green'>GameMaster - ".$name_user." сейчас в игре</font><br>";// строчка с именем ГМа если он в сете, для диза правте её }else{ echo"<font color='red'>GameMaster - ".$name_user." сейчас не в игре</font><br>";// строчка с именем ГМа если он НЕ в сете, для диза правте её }}else{}}} ?>
шесть с половиной минут, это с учётом того что я скачал базы для сервера чтоб посмотреть названия таблиц и перерыл лс в поисках подсказок что где чего и для чего записывается
Не думаю что это будет работать) т.к. в таблице forbid хранятся баны аккаунтов, а не айди ГМов. Да и алгоритм проверки ГМа далеко не лучший, вот я поражаюсь уже дал готовый SQL запрос, и никто так и не использовал его, изобретают велосипед